diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-05-08 15:57:46 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-05-21 08:58:15 +0000 |
commit | c12b012bb7465299490cf93c2ae90499a5c417d5 (patch) | |
tree | cee38ab622df44c9f864c5585981aa9e55ffa3bf /test | |
parent | a59b84774f7c0b92f93a274d4f342c032b7ebda3 (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 'test')
-rw-r--r-- | test/Index/preamble-cyclic-include.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/test/Index/preamble-cyclic-include.cpp b/test/Index/preamble-cyclic-include.cpp new file mode 100644 index 0000000000..cb057f62d5 --- /dev/null +++ b/test/Index/preamble-cyclic-include.cpp @@ -0,0 +1,9 @@ +// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-annotate-tokens=%s:5:1:10:1 %s 2>&1 | FileCheck %s +// CHECK-NOT: error: unterminated conditional directive +// CHECK-NOT: Skipping: [4:1 - 8:7] +// CHECK: error: main file cannot be included recursively when building a preamble +#ifndef A_H +#define A_H +# include "preamble-cyclic-include.cpp" +int bar(); +#endif |