diff options
author | Erik Verbruggen <erikjv@me.com> | 2017-05-30 11:54:55 +0000 |
---|---|---|
committer | Erik Verbruggen <erikjv@me.com> | 2017-05-30 11:54:55 +0000 |
commit | b34c79ff277b20ec00f66c50bf550f2d76ea2108 (patch) | |
tree | d21dc0c9da5e60c9d5d305cf8230514b202b19aa /clang/test/Lexer/preamble2.c | |
parent | 626c997affc93fbf14fc48f6dad2ed430219cf9c (diff) | |
download | bcm5719-llvm-b34c79ff277b20ec00f66c50bf550f2d76ea2108.tar.gz bcm5719-llvm-b34c79ff277b20ec00f66c50bf550f2d76ea2108.zip |
Allow for unfinished #if blocks in preambles
Previously, a preamble only included #if blocks (and friends like
ifdef) if there was a corresponding #endif before any declaration or
definition. The problem is that any header file that uses include guards
will not have a preamble generated, which can make code-completion very
slow.
To prevent errors about unbalanced preprocessor conditionals in the
preamble, and unbalanced preprocessor conditionals after a preamble
containing unfinished conditionals, the conditional stack is stored
in the pch file.
This fixes PR26045.
Differential Revision: http://reviews.llvm.org/D15994
llvm-svn: 304207
Diffstat (limited to 'clang/test/Lexer/preamble2.c')
-rw-r--r-- | clang/test/Lexer/preamble2.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/Lexer/preamble2.c b/clang/test/Lexer/preamble2.c new file mode 100644 index 00000000000..499a9a22a5b --- /dev/null +++ b/clang/test/Lexer/preamble2.c @@ -0,0 +1,19 @@ +// Preamble detection test: header with an include guard. +#ifndef HEADER_H +#define HEADER_H +#include "foo" +int bar; +#endif + +// This test checks for detection of the preamble of a file, which +// includes all of the starting comments and #includes. + +// RUN: %clang_cc1 -print-preamble %s > %t +// RUN: echo END. >> %t +// RUN: FileCheck < %t %s + +// CHECK: // Preamble detection test: header with an include guard. +// CHECK-NEXT: #ifndef HEADER_H +// CHECK-NEXT: #define HEADER_H +// CHECK-NEXT: #include "foo" +// CHECK-NEXT: END. |