diff options
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 8 | ||||
-rw-r--r-- | clang/test/Driver/darwin-dsymutil.c | 7 |
2 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index ef777149d70..9d02dee540e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1226,7 +1226,13 @@ const char *Driver::GetNamedOutputPath(Compilation &C, } llvm::SmallString<128> BasePath(BaseInput); - llvm::StringRef BaseName = llvm::sys::path::filename(BasePath); + llvm::StringRef BaseName; + + // Dsymutil actions should use the full path. + if (isa<DsymutilJobAction>(JA)) + BaseName = BasePath; + else + BaseName = llvm::sys::path::filename(BasePath); // Determine what the derived output name should be. const char *NamedOutput; diff --git a/clang/test/Driver/darwin-dsymutil.c b/clang/test/Driver/darwin-dsymutil.c index f1ffcdc589d..afb41a9db28 100644 --- a/clang/test/Driver/darwin-dsymutil.c +++ b/clang/test/Driver/darwin-dsymutil.c @@ -36,3 +36,10 @@ // RUN: %clang -ccc-host-triple x86_64-apple-darwin10 -ccc-print-bindings \ // RUN: -o foo %t.o -g 2> %t // RUN: grep "Dsymutil" %t | count 0 + +// Check that we put the .dSYM in the right place. +// RUN: %clang -ccc-host-triple x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo %s -g 2> %t +// RUN: FileCheck -check-prefix=CHECK-LOCATION < %t %s + +// CHECK-LOCATION: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["bar/foo"], output: "bar/foo.dSYM" |