dsanders updated this revision to Diff 280653. dsanders added a comment. Attempt to fix the windows-specific failure by using posix-style path::append()
That feels wrong but it's consistent with a test in the same file that already passes because the path manipulation is an extension append (bar/foo->bar/foo.dSYM) rather than a path component append (external->external/foo.dSYM) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D84572/new/ https://reviews.llvm.org/D84572 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp clang/test/Driver/darwin-dsymutil.c Index: clang/test/Driver/darwin-dsymutil.c =================================================================== --- clang/test/Driver/darwin-dsymutil.c +++ clang/test/Driver/darwin-dsymutil.c @@ -26,10 +26,21 @@ // // RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ // RUN: -o foo %s -g 2> %t -// RUN: FileCheck -check-prefix=CHECK-OUTPUT-NAME < %t %s +// RUN: FileCheck -Doutfile=foo -Ddsymfile=foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s // -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "foo" -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["foo"], output: "foo.dSYM" +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=bar/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo -external-dsym-dir external %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=external/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "[[outfile]]" +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["[[outfile]]"], output: "[[dsymfile]]" // Check that we only use dsymutil when needed. // @@ -38,12 +49,5 @@ // RUN: -o foo %t.o -g 2> %t // RUN: not grep "Dsymutil" %t -// Check that we put the .dSYM in the right place. -// RUN: %clang -target 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" - // Check that we don't crash when translating arguments for dsymutil. // RUN: %clang -m32 -arch x86_64 -g %s -### Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -4597,7 +4597,18 @@ StringRef BaseName; // Dsymutil actions should use the full path. - if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) + if (isa<DsymutilJobAction>(JA) && + C.getArgs().hasArg(options::OPT_external_dsym_dir)) { + SmallString<128> ExternalPath( + C.getArgs().getLastArg(options::OPT_external_dsym_dir)->getValue()); + // We use posix style here because the tests (specifically + // darwin-dsymutil.c) demonstrate that posix style paths are acceptable + // even on Windows and if we don't then the similar test covering this + // fails. + llvm::sys::path::append(ExternalPath, llvm::sys::path::Style::posix, + llvm::sys::path::filename(BasePath)); + BaseName = ExternalPath; + } else if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) BaseName = BasePath; else BaseName = llvm::sys::path::filename(BasePath); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -690,6 +690,9 @@ def interface_stub_version_EQ : JoinedOrSeparate<["-"], "interface-stub-version=">, Flags<[CC1Option]>; def exported__symbols__list : Separate<["-"], "exported_symbols_list">; def e : JoinedOrSeparate<["-"], "e">, Group<Link_Group>; +def external_dsym_dir : JoinedOrSeparate<["-"], "external-dsym-dir">, + Flags<[DriverOption, RenderAsInput]>, + HelpText<"Directory to output dSYM's (if any) to">, MetaVarName<"<dir>">; def fmax_tokens_EQ : Joined<["-"], "fmax-tokens=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Max total number of preprocessed tokens for -Wmax-tokens.">; def fPIC : Flag<["-"], "fPIC">, Group<f_Group>;
Index: clang/test/Driver/darwin-dsymutil.c =================================================================== --- clang/test/Driver/darwin-dsymutil.c +++ clang/test/Driver/darwin-dsymutil.c @@ -26,10 +26,21 @@ // // RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ // RUN: -o foo %s -g 2> %t -// RUN: FileCheck -check-prefix=CHECK-OUTPUT-NAME < %t %s +// RUN: FileCheck -Doutfile=foo -Ddsymfile=foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s // -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "foo" -// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["foo"], output: "foo.dSYM" +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=bar/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// RUN: %clang -target x86_64-apple-darwin10 -ccc-print-bindings \ +// RUN: -o bar/foo -external-dsym-dir external %s -g 2> %t +// RUN: FileCheck -Doutfile=bar/foo -Ddsymfile=external/foo.dSYM \ +// RUN: -check-prefix=CHECK-OUTPUT-NAME < %t %s +// +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Linker", inputs: [{{.*}}], output: "[[outfile]]" +// CHECK-OUTPUT-NAME: "x86_64-apple-darwin10" - "darwin::Dsymutil", inputs: ["[[outfile]]"], output: "[[dsymfile]]" // Check that we only use dsymutil when needed. // @@ -38,12 +49,5 @@ // RUN: -o foo %t.o -g 2> %t // RUN: not grep "Dsymutil" %t -// Check that we put the .dSYM in the right place. -// RUN: %clang -target 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" - // Check that we don't crash when translating arguments for dsymutil. // RUN: %clang -m32 -arch x86_64 -g %s -### Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -4597,7 +4597,18 @@ StringRef BaseName; // Dsymutil actions should use the full path. - if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) + if (isa<DsymutilJobAction>(JA) && + C.getArgs().hasArg(options::OPT_external_dsym_dir)) { + SmallString<128> ExternalPath( + C.getArgs().getLastArg(options::OPT_external_dsym_dir)->getValue()); + // We use posix style here because the tests (specifically + // darwin-dsymutil.c) demonstrate that posix style paths are acceptable + // even on Windows and if we don't then the similar test covering this + // fails. + llvm::sys::path::append(ExternalPath, llvm::sys::path::Style::posix, + llvm::sys::path::filename(BasePath)); + BaseName = ExternalPath; + } else if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA)) BaseName = BasePath; else BaseName = llvm::sys::path::filename(BasePath); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -690,6 +690,9 @@ def interface_stub_version_EQ : JoinedOrSeparate<["-"], "interface-stub-version=">, Flags<[CC1Option]>; def exported__symbols__list : Separate<["-"], "exported_symbols_list">; def e : JoinedOrSeparate<["-"], "e">, Group<Link_Group>; +def external_dsym_dir : JoinedOrSeparate<["-"], "external-dsym-dir">, + Flags<[DriverOption, RenderAsInput]>, + HelpText<"Directory to output dSYM's (if any) to">, MetaVarName<"<dir>">; def fmax_tokens_EQ : Joined<["-"], "fmax-tokens=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Max total number of preprocessed tokens for -Wmax-tokens.">; def fPIC : Flag<["-"], "fPIC">, Group<f_Group>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits