[frontend] -frewrite-includes: if there was no inclusion, don't add lineinfo that indicates return from another file.

llvm-svn: 179143
This commit is contained in:
Argyrios Kyrtzidis 2013-04-10 01:53:37 +00:00
parent 82a2a3d8f5
commit 953ef33f59
2 changed files with 9 additions and 4 deletions

View File

@ -253,7 +253,7 @@ bool InclusionRewriter::Process(FileID FileId,
bool Invalid;
const MemoryBuffer &FromFile = *SM.getBuffer(FileId, &Invalid);
if (Invalid) // invalid inclusion
return true;
return false;
const char *FileName = FromFile.getBufferIdentifier();
Lexer RawLex(FileId, &FromFile, PP.getSourceManager(), PP.getLangOpts());
RawLex.SetCommentRetentionState(false);
@ -264,7 +264,7 @@ bool InclusionRewriter::Process(FileID FileId,
WriteLineInfo(FileName, 1, FileType, EOL, " 1");
if (SM.getFileIDSize(FileId) == 0)
return true;
return false;
// The next byte to be copied from the source file
unsigned NextToWrite = 0;
@ -292,12 +292,17 @@ bool InclusionRewriter::Process(FileID FileId,
if (const FileChange *Change = FindFileChangeLocation(
HashToken.getLocation())) {
// now include and recursively process the file
if (Process(Change->Id, Change->FileType))
if (Process(Change->Id, Change->FileType)) {
// and set lineinfo back to this file, if the nested one was
// actually included
// `2' indicates returning to a file (after having included
// another file.
WriteLineInfo(FileName, Line, FileType, EOL, " 2");
} else {
// fix up lineinfo (since commented out directive changed line
// numbers).
WriteLineInfo(FileName, Line, FileType, EOL);
}
} else
// fix up lineinfo (since commented out directive changed line
// numbers) for inclusions that were skipped due to header guards

View File

@ -4,4 +4,4 @@
// CHECK: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}}
// CHECK-NEXT: {{^}}#include "foobar.h"
// CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}}
// CHECK-NEXT: {{^}}# 4 "{{.*}}rewrite-includes-missing.c" 2{{$}}
// CHECK-NEXT: {{^}}# 4 "{{.*}}rewrite-includes-missing.c"{{$}}