[PATCH] D40746: Correctly handle line table entries without filenames during AST serialization

Hans Wennborg via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 4 14:29:32 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL319707: Correctly handle line table entries without filenames during AST serialization (authored by hans).

Changed prior to commit:
  https://reviews.llvm.org/D40746?vs=125227&id=125419#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D40746

Files:
  cfe/trunk/lib/Serialization/ASTReader.cpp
  cfe/trunk/lib/Serialization/ASTWriter.cpp
  cfe/trunk/test/PCH/line-directive-nofilename.c
  cfe/trunk/test/PCH/line-directive-nofilename.h


Index: cfe/trunk/test/PCH/line-directive-nofilename.h
===================================================================
--- cfe/trunk/test/PCH/line-directive-nofilename.h
+++ cfe/trunk/test/PCH/line-directive-nofilename.h
@@ -0,0 +1,5 @@
+#line 42
+int foo; // This should appear as at line-directive-nofilename.h:42
+
+#line 100 "foobar.h"
+int bar; // This should appear as at foobar.h:100
Index: cfe/trunk/test/PCH/line-directive-nofilename.c
===================================================================
--- cfe/trunk/test/PCH/line-directive-nofilename.c
+++ cfe/trunk/test/PCH/line-directive-nofilename.c
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -emit-pch -o %t %S/line-directive-nofilename.h
+// RUN: not %clang_cc1 -include-pch %t -fsyntax-only %s 2>&1 | FileCheck %s
+
+// This causes an "error: redefinition" diagnostic. The notes will have the
+// locations of the declarations from the PCH file.
+double foo, bar;
+
+// CHECK: line-directive-nofilename.h:42:5: note: previous definition is here
+// CHECK: foobar.h:100:5: note: previous definition is here
Index: cfe/trunk/lib/Serialization/ASTReader.cpp
===================================================================
--- cfe/trunk/lib/Serialization/ASTReader.cpp
+++ cfe/trunk/lib/Serialization/ASTReader.cpp
@@ -1220,6 +1220,7 @@
 
   // Parse the file names
   std::map<int, int> FileIDs;
+  FileIDs[-1] = -1; // For unspecified filenames.
   for (unsigned I = 0; Record[Idx]; ++I) {
     // Extract the file name
     auto Filename = ReadPath(F, Record, Idx);
Index: cfe/trunk/lib/Serialization/ASTWriter.cpp
===================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp
@@ -2363,12 +2363,13 @@
 
     // Emit the needed file names.
     llvm::DenseMap<int, int> FilenameMap;
+    FilenameMap[-1] = -1; // For unspecified filenames.
     for (const auto &L : LineTable) {
       if (L.first.ID < 0)
         continue;
       for (auto &LE : L.second) {
         if (FilenameMap.insert(std::make_pair(LE.FilenameID,
-                                              FilenameMap.size())).second)
+                                              FilenameMap.size() - 1)).second)
           AddPath(LineTable.getFilename(LE.FilenameID), Record);
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40746.125419.patch
Type: text/x-patch
Size: 2324 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171204/9b52839a/attachment.bin>


More information about the cfe-commits mailing list