mstorsjo created this revision.
mstorsjo added reviewers: rnk, amccarth.
Herald added a project: clang.
mstorsjo requested review of this revision.

GCC 8 changed behaviour wrt this, and made it consistent for cross compilation 
cases. While it's a change, it's a more sensible behaviour going forward.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D88005

Files:
  clang/lib/Driver/ToolChains/MinGW.cpp
  clang/test/Driver/mingw-implicit-extension-cross.c
  clang/test/Driver/mingw-implicit-extension-windows.c


Index: clang/test/Driver/mingw-implicit-extension-windows.c
===================================================================
--- clang/test/Driver/mingw-implicit-extension-windows.c
+++ clang/test/Driver/mingw-implicit-extension-windows.c
@@ -1,8 +1,4 @@
-// Test how an implicit .exe extension is added. If running the compiler
-// on windows, an implicit extension is added if none is provided in the
-// given name. (Therefore, this test is skipped when not running on windows.)
-
-// REQUIRES: system-windows
+// Test how an implicit .exe extension is added.
 
 // RUN: %clang -target i686-windows-gnu -### 
--sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -o outputname 2>&1 | FileCheck 
%s --check-prefix=CHECK-OUTPUTNAME-EXE
 
Index: clang/test/Driver/mingw-implicit-extension-cross.c
===================================================================
--- clang/test/Driver/mingw-implicit-extension-cross.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Test how an implicit .exe extension is added. If not running the compiler
-// on windows, no implicit extension is added. (Therefore, this test is skipped
-// when running on windows.)
-
-// UNSUPPORTED: system-windows
-
-// RUN: %clang -target i686-windows-gnu -### 
--sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -o outputname 2>&1 | FileCheck 
%s
-
-// CHECK: "-o" "outputname"
Index: clang/lib/Driver/ToolChains/MinGW.cpp
===================================================================
--- clang/lib/Driver/ToolChains/MinGW.cpp
+++ clang/lib/Driver/ToolChains/MinGW.cpp
@@ -164,17 +164,13 @@
   CmdArgs.push_back("-o");
   const char *OutputFile = Output.getFilename();
   // GCC implicitly adds an .exe extension if it is given an output file name
-  // that lacks an extension. However, GCC only does this when actually
-  // running on windows, not when operating as a cross compiler. As some users
-  // have come to rely on this behaviour, try to replicate it.
-#ifdef _WIN32
+  // that lacks an extension.
+  // GCC used to do this only when the compiler itself runs on windows, but
+  // since GCC 8 it does the same when cross compiling as well.
   if (!llvm::sys::path::has_extension(OutputFile))
     CmdArgs.push_back(Args.MakeArgString(Twine(OutputFile) + ".exe"));
   else
     CmdArgs.push_back(OutputFile);
-#else
-  CmdArgs.push_back(OutputFile);
-#endif
 
   Args.AddAllArgs(CmdArgs, options::OPT_e);
   // FIXME: add -N, -n flags


Index: clang/test/Driver/mingw-implicit-extension-windows.c
===================================================================
--- clang/test/Driver/mingw-implicit-extension-windows.c
+++ clang/test/Driver/mingw-implicit-extension-windows.c
@@ -1,8 +1,4 @@
-// Test how an implicit .exe extension is added. If running the compiler
-// on windows, an implicit extension is added if none is provided in the
-// given name. (Therefore, this test is skipped when not running on windows.)
-
-// REQUIRES: system-windows
+// Test how an implicit .exe extension is added.
 
 // RUN: %clang -target i686-windows-gnu -### --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -o outputname 2>&1 | FileCheck %s --check-prefix=CHECK-OUTPUTNAME-EXE
 
Index: clang/test/Driver/mingw-implicit-extension-cross.c
===================================================================
--- clang/test/Driver/mingw-implicit-extension-cross.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Test how an implicit .exe extension is added. If not running the compiler
-// on windows, no implicit extension is added. (Therefore, this test is skipped
-// when running on windows.)
-
-// UNSUPPORTED: system-windows
-
-// RUN: %clang -target i686-windows-gnu -### --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -o outputname 2>&1 | FileCheck %s
-
-// CHECK: "-o" "outputname"
Index: clang/lib/Driver/ToolChains/MinGW.cpp
===================================================================
--- clang/lib/Driver/ToolChains/MinGW.cpp
+++ clang/lib/Driver/ToolChains/MinGW.cpp
@@ -164,17 +164,13 @@
   CmdArgs.push_back("-o");
   const char *OutputFile = Output.getFilename();
   // GCC implicitly adds an .exe extension if it is given an output file name
-  // that lacks an extension. However, GCC only does this when actually
-  // running on windows, not when operating as a cross compiler. As some users
-  // have come to rely on this behaviour, try to replicate it.
-#ifdef _WIN32
+  // that lacks an extension.
+  // GCC used to do this only when the compiler itself runs on windows, but
+  // since GCC 8 it does the same when cross compiling as well.
   if (!llvm::sys::path::has_extension(OutputFile))
     CmdArgs.push_back(Args.MakeArgString(Twine(OutputFile) + ".exe"));
   else
     CmdArgs.push_back(OutputFile);
-#else
-  CmdArgs.push_back(OutputFile);
-#endif
 
   Args.AddAllArgs(CmdArgs, options::OPT_e);
   // FIXME: add -N, -n flags
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to