]> granicus.if.org Git - clang/commitdiff
[frontend] -frewrite-includes: if there was no inclusion, don't add lineinfo that...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 10 Apr 2013 01:53:37 +0000 (01:53 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 10 Apr 2013 01:53:37 +0000 (01:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179143 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Rewrite/Frontend/InclusionRewriter.cpp
test/Frontend/rewrite-includes-missing.c

index d95fb073b1e3a558de1b9b15cd03b90444fa691a..5740a8407eb5d9049ccba5739b6ccf7db41de2f3 100644 (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
index b79bbd9ca8b5281b0e90384dcc70dae3749a1137..da4e209bc1f7fed920bc82ce48a19bf032146157 100644 (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"{{$}}