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