diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index df12ba8fbcb29..b2f2bcb6ac379 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5158,7 +5158,7 @@ def nofixprebinding : Flag<["-"], "nofixprebinding">; def nolibc : Flag<["-"], "nolibc">; def nomultidefs : Flag<["-"], "nomultidefs">; def nopie : Flag<["-"], "nopie">, Visibility<[ClangOption, FlangOption]>; -def no_pie : Flag<["-"], "no-pie">, Visibility<[ClangOption, FlangOption]>, Alias; +def no_pie : Flag<["-"], "no-pie">, Visibility<[ClangOption, FlangOption]>; def noprebind : Flag<["-"], "noprebind">; def noprofilelib : Flag<["-"], "noprofilelib">; def noseglinkedit : Flag<["-"], "noseglinkedit">; diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index ba95ce9c5a281..2b1e8f02cf663 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -294,9 +294,7 @@ static const char *getLDMOption(const llvm::Triple &T, const ArgList &Args) { static bool getStaticPIE(const ArgList &Args, const ToolChain &TC) { bool HasStaticPIE = Args.hasArg(options::OPT_static_pie); - // -no-pie is an alias for -nopie. So, handling -nopie takes care of - // -no-pie as well. - if (HasStaticPIE && Args.hasArg(options::OPT_nopie)) { + if (HasStaticPIE && Args.hasArg(options::OPT_no_pie)) { const Driver &D = TC.getDriver(); const llvm::opt::OptTable &Opts = D.getOpts(); StringRef StaticPIEName = Opts.getOptionName(options::OPT_static_pie); @@ -443,10 +441,8 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_rdynamic)) CmdArgs.push_back("-export-dynamic"); if (!IsShared) { - Arg *A = Args.getLastArg(options::OPT_pie, options::OPT_no_pie, - options::OPT_nopie); - IsPIE = A ? A->getOption().matches(options::OPT_pie) - : ToolChain.isPIEDefault(Args); + IsPIE = Args.hasFlag(options::OPT_pie, options::OPT_no_pie, + ToolChain.isPIEDefault(Args)); if (IsPIE) CmdArgs.push_back("-pie"); CmdArgs.push_back("-dynamic-linker"); diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index c8f02161d8311..21b9004ef2d52 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -116,7 +116,7 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, const bool Shared = Args.hasArg(options::OPT_shared); const bool Profiling = Args.hasArg(options::OPT_pg); const bool Pie = Args.hasArg(options::OPT_pie); - const bool Nopie = Args.hasArg(options::OPT_nopie); + const bool Nopie = Args.hasArg(options::OPT_no_pie, options::OPT_nopie); const bool Relocatable = Args.hasArg(options::OPT_r); ArgStringList CmdArgs; diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index 96757f07a5497..485730da7df1f 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -49,11 +49,8 @@ static bool getPIE(const ArgList &Args, const ToolChain &TC) { Args.hasArg(options::OPT_r)) return false; - Arg *A = Args.getLastArg(options::OPT_pie, options::OPT_no_pie, - options::OPT_nopie); - if (!A) - return TC.isPIEDefault(Args); - return A->getOption().matches(options::OPT_pie); + return Args.hasFlag(options::OPT_pie, options::OPT_no_pie, + TC.isPIEDefault(Args)); } // FIXME: Need to handle CLANG_DEFAULT_LINKER here? diff --git a/clang/test/Driver/android-pie.c b/clang/test/Driver/android-pie.c index 8620e18565458..01720edf98fb1 100644 --- a/clang/test/Driver/android-pie.c +++ b/clang/test/Driver/android-pie.c @@ -36,8 +36,6 @@ // RUN: %clang %s -### -o %t.o 2>&1 -no-pie --target=arm-linux-androideabi24 \ // RUN: | FileCheck --check-prefix=NO-PIE %s -// RUN: %clang %s -### -o %t.o 2>&1 -nopie --target=arm-linux-androideabi24 \ -// RUN: | FileCheck --check-prefix=NO-PIE %s // RUN: %clang %s -### -o %t.o 2>&1 -pie -no-pie --target=arm-linux-androideabi24 \ // RUN: | FileCheck --check-prefix=NO-PIE %s diff --git a/clang/test/Driver/pic.c b/clang/test/Driver/pic.c index 86b2a3b041d5f..aeddead6dbf8f 100644 --- a/clang/test/Driver/pic.c +++ b/clang/test/Driver/pic.c @@ -166,11 +166,11 @@ // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 // RUN: %clang -c %s -target armv7-linux-musleabihf -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 -// RUN: %clang %s -target x86_64-linux-musl -nopie -### 2>&1 \ +// RUN: %clang %s --target=x86_64-linux-musl -no-pie -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIE -// RUN: %clang %s -target x86_64-linux-musl -pie -nopie -### 2>&1 \ +// RUN: %clang %s --target=x86_64-linux-musl -pie -no-pie -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIE -// RUN: %clang %s -target x86_64-linux-musl -nopie -pie -### 2>&1 \ +// RUN: %clang %s --target=x86_64-linux-musl -no-pie -pie -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 // // Darwin is a beautiful and unique snowflake when it comes to these flags.