forked from OSchip/llvm-project
CPP Output: Do not emit an enter file marker for the main file.
- This diverges from gcc, and confuses tools (like dtrace) which track # line markers as a way to determine which content is in the context of the main file. llvm-svn: 168128
This commit is contained in:
parent
08b5fef122
commit
5d38875d81
|
@ -95,6 +95,7 @@ private:
|
||||||
bool DisableLineMarkers;
|
bool DisableLineMarkers;
|
||||||
bool DumpDefines;
|
bool DumpDefines;
|
||||||
bool UseLineDirective;
|
bool UseLineDirective;
|
||||||
|
bool IsFirstFileEntered;
|
||||||
public:
|
public:
|
||||||
PrintPPOutputPPCallbacks(Preprocessor &pp, raw_ostream &os,
|
PrintPPOutputPPCallbacks(Preprocessor &pp, raw_ostream &os,
|
||||||
bool lineMarkers, bool defines)
|
bool lineMarkers, bool defines)
|
||||||
|
@ -107,6 +108,7 @@ public:
|
||||||
EmittedDirectiveOnThisLine = false;
|
EmittedDirectiveOnThisLine = false;
|
||||||
FileType = SrcMgr::C_User;
|
FileType = SrcMgr::C_User;
|
||||||
Initialized = false;
|
Initialized = false;
|
||||||
|
IsFirstFileEntered = false;
|
||||||
|
|
||||||
// If we're in microsoft mode, use normal #line instead of line markers.
|
// If we're in microsoft mode, use normal #line instead of line markers.
|
||||||
UseLineDirective = PP.getLangOpts().MicrosoftExt;
|
UseLineDirective = PP.getLangOpts().MicrosoftExt;
|
||||||
|
@ -273,6 +275,15 @@ void PrintPPOutputPPCallbacks::FileChanged(SourceLocation Loc,
|
||||||
Initialized = true;
|
Initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do not emit an enter marker for the main file (which we expect is the first
|
||||||
|
// entered file). This matches gcc, and improves compatibility with some tools
|
||||||
|
// which track the # line markers as a way to determine when the preprocessed
|
||||||
|
// output is in the context of the main file.
|
||||||
|
if (Reason == PPCallbacks::EnterFile && !IsFirstFileEntered) {
|
||||||
|
IsFirstFileEntered = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (Reason) {
|
switch (Reason) {
|
||||||
case PPCallbacks::EnterFile:
|
case PPCallbacks::EnterFile:
|
||||||
WriteLineInfo(CurLine, " 1", 2);
|
WriteLineInfo(CurLine, " 1", 2);
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
// PR6101
|
// PR6101
|
||||||
int a;
|
int a;
|
||||||
// CHECK: # 1 "{{.*}}line-directive-output.c"
|
// CHECK: # 1 "{{.*}}line-directive-output.c"
|
||||||
|
|
||||||
|
// Check that we do not emit an enter marker for the main file.
|
||||||
|
// CHECK-NOT: # 1 "{{.*}}line-directive-output.c" 1
|
||||||
|
|
||||||
// CHECK: int a;
|
// CHECK: int a;
|
||||||
|
|
||||||
// CHECK-NEXT: # 50 "{{.*}}line-directive-output.c"
|
// CHECK-NEXT: # 50 "{{.*}}line-directive-output.c"
|
||||||
|
|
Loading…
Reference in New Issue