mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-09 09:56:06 +00:00

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
36 lines
880 B
C
36 lines
880 B
C
// Preamble detection test: see below for comments and test commands.
|
|
//* A BCPL comment that includes '/*'
|
|
#include <blah>
|
|
#ifndef FOO
|
|
#else
|
|
#ifdef BAR
|
|
#elif WIBBLE
|
|
#endif
|
|
#pragma unknown
|
|
#endif
|
|
#ifdef WIBBLE
|
|
#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: see below for comments and test commands.
|
|
// CHECK-NEXT: //* A BCPL comment that includes '/*'
|
|
// CHECK-NEXT: #include <blah>
|
|
// CHECK-NEXT: #ifndef FOO
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: #ifdef BAR
|
|
// CHECK-NEXT: #elif WIBBLE
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: #pragma unknown
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: #ifdef WIBBLE
|
|
// CHECK-NEXT: #include "foo"
|
|
// CHECK-NEXT: END.
|