diff options
-rw-r--r-- | lib/Driver/Driver.cpp | 20 | ||||
-rw-r--r-- | test/Driver/resource-dir.cpp | 10 |
2 files changed, 21 insertions, 9 deletions
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 652046fce4..140c8799f1 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -59,15 +59,6 @@ Driver::Driver(StringRef ClangExecutable, Name = llvm::sys::path::stem(ClangExecutable); Dir = llvm::sys::path::parent_path(ClangExecutable); - - // Compute the path to the resource directory. - StringRef ClangResourceDir(CLANG_RESOURCE_DIR); - SmallString<128> P(Dir); - if (ClangResourceDir != "") - llvm::sys::path::append(P, ClangResourceDir); - else - llvm::sys::path::append(P, "..", "lib", "clang", CLANG_VERSION_STRING); - ResourceDir = P.str(); } Driver::~Driver() { @@ -291,6 +282,17 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { if (Args->hasArg(options::OPT_nostdlib)) UseStdLib = false; + // Compute the path to the resource directory. We used to do this in + // Driver::Driver(), but that's not right, as command line args (such as + // ccc-install-dir) can change 'Dir'. + StringRef ClangResourceDir(CLANG_RESOURCE_DIR); + SmallString<128> P(Dir); + if (!ClangResourceDir.empty()) + llvm::sys::path::append(P, ClangResourceDir); + else + llvm::sys::path::append(P, "..", "lib", "clang", CLANG_VERSION_STRING); + ResourceDir = P.str(); + // Perform the default argument translations. DerivedArgList *TranslatedArgs = TranslateInputArgs(*Args); diff --git a/test/Driver/resource-dir.cpp b/test/Driver/resource-dir.cpp new file mode 100644 index 0000000000..484d7f5576 --- /dev/null +++ b/test/Driver/resource-dir.cpp @@ -0,0 +1,10 @@ +// RUN: %clang %s -fsyntax-only -### 2> %t.log +// RUN: FileCheck %s --check-prefix=CHECK-DEFAULT < %t.log + +// CHECK-DEFAULT: "-resource-dir" "{{.+}}/../lib/clang/{{.+}}" + +// RUN: %clang %s -fsyntax-only -ccc-install-dir /my/install/dir -### 2> %t.log +// RUN: FileCheck %s --check-prefix=CHECK-INSTALL-DIR < %t.log +// CHECK-INSTALL-DIR: "-resource-dir" "/my/install/dir/../lib/clang + +void foo(void) {} |