<div dir="ltr">This fails here <a href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/3537/steps/run%20tests/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-windows/builds/3537/steps/run%20tests/logs/stdio</a></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Dec 25, 2016 at 7:45 PM Saleem Abdulrasool via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: compnerd<br class="gmail_msg">
Date: Sun Dec 25 21:35:24 2016<br class="gmail_msg">
New Revision: 290533<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=290533&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=290533&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
Driver: warn on -fPIC/-fpic/-fPIE/-fpie on Windows<br class="gmail_msg">
<br class="gmail_msg">
Use of these flags would result in the use of ELF-style PIE/PIC code<br class="gmail_msg">
which is incorrect on Windows.  Windows is inherently PIC by means of<br class="gmail_msg">
the DLL slide that occurs at load.  This also mirrors the behaviour on<br class="gmail_msg">
GCC for MinGW.  Currently, the Windows x86_64 forces the relocation<br class="gmail_msg">
model to PIC (Level 2).  This is unchanged for now, though we should<br class="gmail_msg">
remove any assumptions on that and change it to a static relocation<br class="gmail_msg">
model.<br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    cfe/trunk/test/Driver/windows-pic.cpp<br class="gmail_msg">
Modified:<br class="gmail_msg">
    cfe/trunk/lib/Driver/Tools.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: cfe/trunk/lib/Driver/Tools.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=290533&r1=290532&r2=290533&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=290533&r1=290532&r2=290533&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br class="gmail_msg">
+++ cfe/trunk/lib/Driver/Tools.cpp Sun Dec 25 21:35:24 2016<br class="gmail_msg">
@@ -3859,6 +3859,17 @@ ParsePICArgs(const ToolChain &ToolChain,<br class="gmail_msg">
                                     options::OPT_fpic, options::OPT_fno_pic,<br class="gmail_msg">
                                     options::OPT_fPIE, options::OPT_fno_PIE,<br class="gmail_msg">
                                     options::OPT_fpie, options::OPT_fno_pie);<br class="gmail_msg">
+  if (Triple.isOSWindows() && LastPICArg &&<br class="gmail_msg">
+      LastPICArg ==<br class="gmail_msg">
+          Args.getLastArg(options::OPT_fPIC, options::OPT_fpic,<br class="gmail_msg">
+                          options::OPT_fPIE, options::OPT_fpie)) {<br class="gmail_msg">
+    ToolChain.getDriver().Diag(diag::err_drv_unsupported_opt_for_target)<br class="gmail_msg">
+        << LastPICArg->getSpelling() << Triple.str();<br class="gmail_msg">
+    if (Triple.getArch() == llvm::Triple::x86_64)<br class="gmail_msg">
+      return std::make_tuple(llvm::Reloc::PIC_, 2U, false);<br class="gmail_msg">
+    return std::make_tuple(llvm::Reloc::Static, 0U, false);<br class="gmail_msg">
+  }<br class="gmail_msg">
+<br class="gmail_msg">
   // Check whether the tool chain trumps the PIC-ness decision. If the PIC-ness<br class="gmail_msg">
   // is forced, then neither PIC nor PIE flags will have no effect.<br class="gmail_msg">
   if (!ToolChain.isPICDefaultForced()) {<br class="gmail_msg">
<br class="gmail_msg">
Added: cfe/trunk/test/Driver/windows-pic.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/windows-pic.cpp?rev=290533&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/windows-pic.cpp?rev=290533&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- cfe/trunk/test/Driver/windows-pic.cpp (added)<br class="gmail_msg">
+++ cfe/trunk/test/Driver/windows-pic.cpp Sun Dec 25 21:35:24 2016<br class="gmail_msg">
@@ -0,0 +1,59 @@<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-itanium -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target i686-windows-gnu -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-itanium -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fPIC -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -Fpic -fno-pic %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fPIE -fno-pie %s<br class="gmail_msg">
+// RUN: %clang -### -target x86_64-windows-gnu -fpie -fno-pie %s<br class="gmail_msg">
+<br class="gmail_msg">
+// CHECK-PIC-ERROR: unsupported option '-fPIC' for target '{{.*}}<br class="gmail_msg">
+// CHECK-pic-ERROR: unsupported option '-fpic' for target '{{.*}}<br class="gmail_msg">
+// CHECK-PIE-ERROR: unsupported option '-fPIE' for target '{{.*}}<br class="gmail_msg">
+// CHECK-pie-ERROR: unsupported option '-fpie' for target '{{.*}}<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="gmail_msg">
</blockquote></div>