summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2014-08-13 12:34:41 +0000
committerManuel Klimek <klimek@google.com>2014-08-13 12:34:41 +0000
commitc0ff99089aca5169abd74fdf2cd66f23e61f83d5 (patch)
treec45285ca3493e8e64add786dbae98f1266584f56
parent2fe75b3a735ebe546e8ca6fa6163461fa86ce006 (diff)
downloadbcm5719-llvm-c0ff99089aca5169abd74fdf2cd66f23e61f83d5.tar.gz
bcm5719-llvm-c0ff99089aca5169abd74fdf2cd66f23e61f83d5.zip
Default getFile() to use the last accessed name in the FileEntry.
With modules we start accessing headers for the first time while reading the module map, which often has very different paths from the include scanning logic. Using the name by which the file was accessed gets us one step closer to the right solution, which is using a FileName abstraction that decouples the name by which a file was accessed from the FileEntry. llvm-svn: 215541
-rw-r--r--clang/lib/Basic/FileManager.cpp7
-rw-r--r--clang/test/Modules/Inputs/filename/a.h1
-rw-r--r--clang/test/Modules/Inputs/filename/module.map3
-rw-r--r--clang/test/Modules/filename.cpp9
4 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index e4a7f1e2575..07297baf6d5 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -281,6 +281,13 @@ const FileEntry *FileManager::getFile(StringRef Filename, bool openFile,
if (DirInfo != UFE.Dir && Data.IsVFSMapped)
UFE.Dir = DirInfo;
+ // Always update the name to use the last name by which a file was accessed.
+ // FIXME: Neither this nor always using the first name is correct; we want
+ // to switch towards a design where we return a FileName object that
+ // encapsulates both the name by which the file was accessed and the
+ // corresponding FileEntry.
+ UFE.Name = Data.Name;
+
return &UFE;
}
diff --git a/clang/test/Modules/Inputs/filename/a.h b/clang/test/Modules/Inputs/filename/a.h
new file mode 100644
index 00000000000..8f896a9ba8f
--- /dev/null
+++ b/clang/test/Modules/Inputs/filename/a.h
@@ -0,0 +1 @@
+const char *p = __FILE__;
diff --git a/clang/test/Modules/Inputs/filename/module.map b/clang/test/Modules/Inputs/filename/module.map
new file mode 100644
index 00000000000..ff164ad7bac
--- /dev/null
+++ b/clang/test/Modules/Inputs/filename/module.map
@@ -0,0 +1,3 @@
+module "A" {
+ header "a.h"
+}
diff --git a/clang/test/Modules/filename.cpp b/clang/test/Modules/filename.cpp
new file mode 100644
index 00000000000..66891a04b74
--- /dev/null
+++ b/clang/test/Modules/filename.cpp
@@ -0,0 +1,9 @@
+// RUN: cd %S
+// RUN: %clang_cc1 -I. -fmodule-maps -fmodule-name=A -fmodule-map-file=%S/Inputs/filename/module.map %s -E | FileCheck %s
+// REQUIRES: shell
+
+#include "Inputs/filename/a.h"
+
+// Make sure that headers that are referenced by module maps have __FILE__
+// reflect the include path they were found with.
+// CHECK: const char *p = "./Inputs/filename/a.h"
OpenPOWER on IntegriCloud