[llvm] r241710 - LibDriver: Fix output path inference.
Rafael EspĂndola
rafael.espindola at gmail.com
Wed Jul 8 13:30:06 PDT 2015
Thanks!
On 8 July 2015 at 15:00, Peter Collingbourne <peter at pcc.me.uk> wrote:
> Author: pcc
> Date: Wed Jul 8 14:00:46 2015
> New Revision: 241710
>
> URL: http://llvm.org/viewvc/llvm-project?rev=241710&view=rev
> Log:
> LibDriver: Fix output path inference.
>
> The inferred output file name is based on the first input file, not the
> first one with extension .obj. The output file was also being written to
> the wrong directory; it needs to be written to whichever directory on the
> libpath it was found in. This change fixes both issues.
>
> Added:
> llvm/trunk/test/LibDriver/infer-output-path.test
> Modified:
> llvm/trunk/lib/LibDriver/LibDriver.cpp
>
> Modified: llvm/trunk/lib/LibDriver/LibDriver.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LibDriver/LibDriver.cpp?rev=241710&r1=241709&r2=241710&view=diff
> ==============================================================================
> --- llvm/trunk/lib/LibDriver/LibDriver.cpp (original)
> +++ llvm/trunk/lib/LibDriver/LibDriver.cpp Wed Jul 8 14:00:46 2015
> @@ -56,17 +56,13 @@ public:
>
> }
>
> -static std::string getOutputPath(llvm::opt::InputArgList *Args) {
> +static std::string getOutputPath(llvm::opt::InputArgList *Args,
> + const llvm::NewArchiveIterator &FirstMember) {
> if (auto *Arg = Args->getLastArg(OPT_out))
> return Arg->getValue();
> - for (auto *Arg : Args->filtered(OPT_INPUT)) {
> - if (!StringRef(Arg->getValue()).endswith_lower(".obj"))
> - continue;
> - SmallString<128> Val = StringRef(Arg->getValue());
> - llvm::sys::path::replace_extension(Val, ".lib");
> - return Val.str();
> - }
> - llvm_unreachable("internal error");
> + SmallString<128> Val = FirstMember.getNew();
> + llvm::sys::path::replace_extension(Val, ".lib");
> + return Val.str();
> }
>
> static std::vector<StringRef> getSearchPaths(llvm::opt::InputArgList *Args,
> @@ -143,8 +139,8 @@ int llvm::libDriverMain(llvm::ArrayRef<c
> llvm::sys::path::filename(Arg->getValue()));
> }
>
> - std::pair<StringRef, std::error_code> Result =
> - llvm::writeArchive(getOutputPath(&Args), Members, /*WriteSymtab=*/true);
> + std::pair<StringRef, std::error_code> Result = llvm::writeArchive(
> + getOutputPath(&Args, Members[0]), Members, /*WriteSymtab=*/true);
> if (Result.second) {
> if (Result.first.empty())
> Result.first = ArgsArr[0];
>
> Added: llvm/trunk/test/LibDriver/infer-output-path.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LibDriver/infer-output-path.test?rev=241710&view=auto
> ==============================================================================
> --- llvm/trunk/test/LibDriver/infer-output-path.test (added)
> +++ llvm/trunk/test/LibDriver/infer-output-path.test Wed Jul 8 14:00:46 2015
> @@ -0,0 +1,15 @@
> +RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/a.obj %S/Inputs/a.s
> +RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/b.o %S/Inputs/b.s
> +RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/c %S/Inputs/b.s
> +
> +RUN: rm -f %T/a.lib
> +RUN: llvm-lib %T/a.obj
> +RUN: test -e %T/a.lib
> +
> +RUN: rm -f %T/b.lib
> +RUN: llvm-lib /libpath:%T b.o
> +RUN: test -e %T/b.lib
> +
> +RUN: rm -f %T/c.lib
> +RUN: llvm-lib /libpath:%T c
> +RUN: test -e %T/c.lib
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list