forked from OSchip/llvm-project
PR16339: Don't produce a diagnostic pointing at the whitespace between a '#if'
and a '!defined(X)' if we find a broken header guard. This is suboptimal; we should point the diagnostic at the 'X' token not the 'if' token, but it fixes the crash. llvm-svn: 184054
This commit is contained in:
parent
d1336faf53
commit
089ee1554c
|
@ -2132,7 +2132,8 @@ void Preprocessor::HandleIfDirective(Token &IfToken,
|
|||
// directive seen, handle it for the multiple-include optimization.
|
||||
if (CurPPLexer->getConditionalStackDepth() == 0) {
|
||||
if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue)
|
||||
CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, ConditionalBegin);
|
||||
// FIXME: Pass in the location of the macro name, not the 'if' token.
|
||||
CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation());
|
||||
else
|
||||
CurPPLexer->MIOpt.EnterTopLevelConditional();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
#if !defined(foo)
|
||||
#define goo
|
||||
int n;
|
||||
#endif
|
|
@ -17,6 +17,16 @@
|
|||
// CHECK: {{^}} ^~~~~~~~~
|
||||
// CHECK: {{^}} bad_header_guard
|
||||
|
||||
#include "Inputs/bad-header-guard-defined.h"
|
||||
// CHECK: In file included from {{.*}}header.cpp:{{[0-9]*}}:
|
||||
// CHECK: {{.*}}bad-header-guard-defined.h:1:2: warning: 'foo' is used as a header guard here, followed by #define of a different macro
|
||||
// CHECK: {{^}}#if !defined(foo)
|
||||
// CHECK: {{^}} ^~
|
||||
// CHECK: {{.*}}bad-header-guard-defined.h:2:9: note: 'goo' is defined here; did you mean 'foo'?
|
||||
// CHECK: {{^}}#define goo
|
||||
// CHECK: {{^}} ^~~
|
||||
// CHECK: {{^}} foo
|
||||
|
||||
#include "Inputs/multiple.h"
|
||||
#include "Inputs/multiple.h"
|
||||
#include "Inputs/multiple.h"
|
||||
|
@ -30,4 +40,4 @@
|
|||
// CHECK: {{^}} ^~~~~
|
||||
// CHECK: {{^}} multiple
|
||||
|
||||
// CHECK: 2 warnings generated.
|
||||
// CHECK: 3 warnings generated.
|
||||
|
|
Loading…
Reference in New Issue