]> granicus.if.org Git - clang/commitdiff
When writing file references in a pch, make sure to ask the file manager for the...
authorAnders Carlsson <andersca@mac.com>
Tue, 8 Mar 2011 16:04:35 +0000 (16:04 +0000)
committerAnders Carlsson <andersca@mac.com>
Tue, 8 Mar 2011 16:04:35 +0000 (16:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127248 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Serialization/ASTWriter.cpp
test/PCH/Inputs/working-directory-1.h [new file with mode: 0644]
test/PCH/working-directory.cpp [new file with mode: 0644]
test/PCH/working-directory.h [new file with mode: 0644]

index f172b7aceca29c4d5642147710ca28d988201bad..1cb195dd310ac632c33890289f244b17aeed849e 100644 (file)
@@ -1460,6 +1460,13 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr,
         // Turn the file name into an absolute path, if it isn't already.
         const char *Filename = Content->OrigEntry->getName();
         llvm::SmallString<128> FilePath(Filename);
+
+        // Ask the file manager to fixup the relative path for us. This will 
+        // honor the working directory.
+        SourceMgr.getFileManager().FixupRelativePath(FilePath);
+
+        // FIXME: This call to make_absolute shouldn't be necessary, the
+        // call to FixupRelativePath should always return an absolute path.
         llvm::sys::fs::make_absolute(FilePath);
         Filename = FilePath.c_str();
 
diff --git a/test/PCH/Inputs/working-directory-1.h b/test/PCH/Inputs/working-directory-1.h
new file mode 100644 (file)
index 0000000..e42eda4
--- /dev/null
@@ -0,0 +1,5 @@
+template<typename T> struct A {
+  A() {
+    int a;
+  }
+};
diff --git a/test/PCH/working-directory.cpp b/test/PCH/working-directory.cpp
new file mode 100644 (file)
index 0000000..e77d31b
--- /dev/null
@@ -0,0 +1,12 @@
+// Test this without pch.
+// RUN: %clang_cc1 -working-directory %S -I. -include working-directory.h %s -Wunused
+
+// Test with pch.
+// RUN: %clang_cc1 -working-directory %S -x c++-header -emit-pch -o %t.pch -I. working-directory.h
+// RUN: %clang_cc1 -include-pch %t.pch -fsyntax-only %s -Wunused
+
+void f() {
+  // Instantiating A<char> will trigger a warning, which will end up trying to get the path to
+  // the header that contains A.
+  A<char> b;
+}
diff --git a/test/PCH/working-directory.h b/test/PCH/working-directory.h
new file mode 100644 (file)
index 0000000..02a60e3
--- /dev/null
@@ -0,0 +1 @@
+#include <Inputs/working-directory-1.h>