forked from OSchip/llvm-project
Invoke the FileChanged callback before pushing the linemarker for a system
header. Getting it in the wrong order generated incorrect line markers in -E mode. In the testcase from PR9861 we used to generate: # 1 "test.c" 2 # 1 "./foobar.h" 1 # 0 "./foobar.h" # 0 "./foobar.h" 3 # 2 "test.c" 2 now we properly produce: # 1 "test.c" 2 # 1 "./foobar.h" 1 # 1 "./foobar.h" 3 # 2 "test.c" 2 This fixes PR9861. llvm-svn: 131871
This commit is contained in:
parent
a8cde3c08d
commit
3bdc7679ce
|
@ -330,16 +330,16 @@ void Preprocessor::HandlePragmaSystemHeader(Token &SysHeaderTok) {
|
|||
unsigned FilenameID = SourceMgr.getLineTableFilenameID(PLoc.getFilename(),
|
||||
FilenameLen);
|
||||
|
||||
// Notify the client, if desired, that we are in a new source file.
|
||||
if (Callbacks)
|
||||
Callbacks->FileChanged(SysHeaderTok.getLocation(),
|
||||
PPCallbacks::SystemHeaderPragma, SrcMgr::C_System);
|
||||
|
||||
// Emit a line marker. This will change any source locations from this point
|
||||
// forward to realize they are in a system header.
|
||||
// Create a line note with this information.
|
||||
SourceMgr.AddLineNote(SysHeaderTok.getLocation(), PLoc.getLine(), FilenameID,
|
||||
false, false, true, false);
|
||||
|
||||
// Notify the client, if desired, that we are in a new source file.
|
||||
if (Callbacks)
|
||||
Callbacks->FileChanged(SysHeaderTok.getLocation(),
|
||||
PPCallbacks::SystemHeaderPragma, SrcMgr::C_System);
|
||||
}
|
||||
|
||||
/// HandlePragmaDependency - Handle #pragma GCC dependency "foo" blah.
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
// RUN: %clang -verify -pedantic %s -fsyntax-only
|
||||
// RUN: %clang -E %s | FileCheck %s
|
||||
// rdar://6899937
|
||||
#include "pragma_sysheader.h"
|
||||
|
||||
|
||||
// PR9861: Verify that line markers are not messed up in -E mode.
|
||||
// CHECK: # 1 "{{.*}}pragma_sysheader.h" 1
|
||||
// CHECK-NEXT: # 1 "{{.*}}pragma_sysheader.h" 3
|
||||
// CHECK-NEXT: typedef int x;
|
||||
// CHECK-NEXT: typedef int x;
|
||||
// CHECK-NEXT: # 5 "{{.*}}pragma_sysheader.c" 2
|
||||
|
|
Loading…
Reference in New Issue