Author: ikudrin Date: Mon Feb 26 18:51:30 2018 New Revision: 326164 URL: http://llvm.org/viewvc/llvm-project?rev=326164&view=rev Log: [Driver] Allow using a canonical form of '-fuse-ld=' when cross-compiling on Windows.
clang used to require adding an ".exe" suffix when targeting ELF systems on Windows. Differential Revision: https://reviews.llvm.org/D43621 Added: cfe/trunk/test/Driver/Inputs/fuse_ld_windows/ cfe/trunk/test/Driver/Inputs/fuse_ld_windows/ld.foo.exe (with props) cfe/trunk/test/Driver/fuse-ld-windows.c Modified: cfe/trunk/lib/Driver/ToolChain.cpp Modified: cfe/trunk/lib/Driver/ToolChain.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=326164&r1=326163&r2=326164&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChain.cpp (original) +++ cfe/trunk/lib/Driver/ToolChain.cpp Mon Feb 26 18:51:30 2018 @@ -412,7 +412,7 @@ std::string ToolChain::GetLinkerPath() c if (llvm::sys::path::is_absolute(UseLinker)) { // If we're passed what looks like an absolute path, don't attempt to // second-guess that. - if (llvm::sys::fs::exists(UseLinker)) + if (llvm::sys::fs::can_execute(UseLinker)) return UseLinker; } else if (UseLinker.empty() || UseLinker == "ld") { // If we're passed -fuse-ld= with no argument, or with the argument ld, @@ -427,7 +427,7 @@ std::string ToolChain::GetLinkerPath() c LinkerName.append(UseLinker); std::string LinkerPath(GetProgramPath(LinkerName.c_str())); - if (llvm::sys::fs::exists(LinkerPath)) + if (llvm::sys::fs::can_execute(LinkerPath)) return LinkerPath; } Added: cfe/trunk/test/Driver/Inputs/fuse_ld_windows/ld.foo.exe URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/fuse_ld_windows/ld.foo.exe?rev=326164&view=auto ============================================================================== (empty) Propchange: cfe/trunk/test/Driver/Inputs/fuse_ld_windows/ld.foo.exe ------------------------------------------------------------------------------ svn:executable = * Added: cfe/trunk/test/Driver/fuse-ld-windows.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fuse-ld-windows.c?rev=326164&view=auto ============================================================================== --- cfe/trunk/test/Driver/fuse-ld-windows.c (added) +++ cfe/trunk/test/Driver/fuse-ld-windows.c Mon Feb 26 18:51:30 2018 @@ -0,0 +1,25 @@ +// REQUIRES: system-windows + +// We used to require adding ".exe" suffix when cross-compiling on Windows. +// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \ +// RUN: -B %S/Inputs/fuse_ld_windows -fuse-ld=foo 2>&1 \ +// RUN: | FileCheck %s + +// Check that the old variant still works. +// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \ +// RUN: -B %S/Inputs/fuse_ld_windows -fuse-ld=foo.exe 2>&1 \ +// RUN: | FileCheck %s + +// With the full path, the extension can be omitted, too, +// because Windows allows that. +// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \ +// RUN: -fuse-ld=%S/Inputs/fuse_ld_windows/ld.foo 2>&1 \ +// RUN: | FileCheck %s + +// Check that the full path with the extension works too. +// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \ +// RUN: -fuse-ld=%S/Inputs/fuse_ld_windows/ld.foo.exe 2>&1 \ +// RUN: | FileCheck %s + +// CHECK-NOT: invalid linker name +// CHECK: /Inputs/fuse_ld_windows{{/|\\\\}}ld.foo _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits