summaryrefslogtreecommitdiffstats
path: root/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-05-08 15:57:46 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2019-05-21 08:58:15 +0000
commitc12b012bb7465299490cf93c2ae90499a5c417d5 (patch)
treecee38ab622df44c9f864c5585981aa9e55ffa3bf /lib/Basic/SourceManager.cpp
parenta59b84774f7c0b92f93a274d4f342c032b7ebda3 (diff)
[backported/clang-9][Preamble] Stop circular inclusion of main file when building preamblerelease_80-based
-------------------------------------------------------------------------- https://reviews.llvm.org/D53866 -------------------------------------------------------------------------- If a header file was processed for the second time, we could end up with a wrong conditional stack and skipped ranges: In the particular example, if the header guard is evaluated the second time and it is decided to skip the conditional block, the corresponding "#endif" is never seen since the preamble does not include it and we end up in the Tok.is(tok::eof) case with a wrong conditional stack. Detect the circular inclusion, emit a diagnostic and stop processing the inclusion. Fixes: QTCREATORBUG-20883 Change-Id: I02644ddb507db4033dd5c69920c8e10500f0121c Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'lib/Basic/SourceManager.cpp')
-rw-r--r--lib/Basic/SourceManager.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp
index ce8aa5d112..5a6d530054 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/lib/Basic/SourceManager.cpp
@@ -1581,7 +1581,7 @@ FileID SourceManager::translateFile(const FileEntry *SourceFile) const {
if (MainSLoc.isFile()) {
const ContentCache *MainContentCache
= MainSLoc.getFile().getContentCache();
- if (!MainContentCache) {
+ if (!MainContentCache || !MainContentCache->OrigEntry) {
// Can't do anything
} else if (MainContentCache->OrigEntry == SourceFile) {
FirstFID = MainFileID;