From: Simon Atanasyan Date: Thu, 10 Aug 2017 15:42:25 +0000 (+0000) Subject: [mips] Show warning in case of mixing -mlong-calls and -mabicalls options X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5255c89a98a7bdee55803131f1e4de28e67e1902;p=clang [mips] Show warning in case of mixing -mlong-calls and -mabicalls options While we do not support `-mshared / -mno-shared` properly, show warning and ignore `-mlong-calls` option in case of implicitly or explicitly provided `-mabicalls` option. Differential revision: https://reviews.llvm.org/D36551 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310614 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index df47f14f1c..4f13fa125b 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -292,6 +292,10 @@ def warn_drv_unsupported_gpopt : Warning< "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit" " usage of }0-mabicalls">, InGroup; +def warn_drv_unsupported_longcalls : Warning< + "ignoring '-mlong-calls' option as it is not currently supported with " + "%select{|the implicit usage of }0-mabicalls">, + InGroup; def warn_drv_unsupported_abicalls : Warning< "ignoring '-mabicalls' option as it cannot be used with " "non position-independent code and the N64 ABI">, diff --git a/lib/Driver/ToolChains/Arch/Mips.cpp b/lib/Driver/ToolChains/Arch/Mips.cpp index 2a0d6eeeb9..6459036b75 100644 --- a/lib/Driver/ToolChains/Arch/Mips.cpp +++ b/lib/Driver/ToolChains/Arch/Mips.cpp @@ -245,6 +245,16 @@ void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, else Features.push_back("-noabicalls"); + if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, + options::OPT_mno_long_calls)) { + if (A->getOption().matches(options::OPT_mno_long_calls)) + Features.push_back("-long-calls"); + else if (!UseAbiCalls) + Features.push_back("+long-calls"); + else + D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1); + } + mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { // FIXME: Note, this is a hack. We need to pass the selected float @@ -309,8 +319,6 @@ void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg, options::OPT_modd_spreg, "nooddspreg"); - AddTargetFeature(Args, Features, options::OPT_mlong_calls, - options::OPT_mno_long_calls, "long-calls"); AddTargetFeature(Args, Features, options::OPT_mmt, options::OPT_mno_mt, "mt"); } diff --git a/test/Driver/mips-features.c b/test/Driver/mips-features.c index d2814fec4a..56fbbb103e 100644 --- a/test/Driver/mips-features.c +++ b/test/Driver/mips-features.c @@ -336,12 +336,16 @@ // CHECK-IMG-SINGLEFLOAT-FPXX: "-target-feature" "+fpxx" // -mlong-call -// RUN: %clang -target mips-img-linux-gnu -### -c %s -mlong-calls 2>&1 \ +// RUN: %clang -target mips-img-linux-gnu -### -c %s \ +// RUN: -mno-abicalls -mlong-calls 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-ON %s -// RUN: %clang -target mips-img-linux-gnu -### -c %s -mno-long-calls 2>&1 \ +// RUN: %clang -target mips-img-linux-gnu -### -c %s \ +// RUN: -mno-abicalls -mno-long-calls 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-OFF %s // RUN: %clang -target mips-img-linux-gnu -### -c %s 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-DEF %s +// RUN: %clang -target mips-img-linux-gnu -### -c %s -mlong-calls 2>&1 \ +// RUN: | FileCheck --check-prefix=LONG-CALLS-DEF %s // LONG-CALLS-ON: "-target-feature" "+long-calls" // LONG-CALLS-OFF: "-target-feature" "-long-calls" // LONG-CALLS-DEF-NOT: "long-calls" diff --git a/test/Driver/mips-longcalls-warning.c b/test/Driver/mips-longcalls-warning.c new file mode 100644 index 0000000000..c19d6d8c0c --- /dev/null +++ b/test/Driver/mips-longcalls-warning.c @@ -0,0 +1,6 @@ +// REQUIRES: mips-registered-target +// RUN: %clang -### -c -target mips-mti-elf -mlong-calls %s 2>&1 | FileCheck -check-prefix=IMPLICIT %s +// IMPLICIT: warning: ignoring '-mlong-calls' option as it is not currently supported with the implicit usage of -mabicalls + +// RUN: %clang -### -c -target mips-mti-elf -mlong-calls -mabicalls %s 2>&1 | FileCheck -check-prefix=EXPLICIT %s +// EXPLICIT: warning: ignoring '-mlong-calls' option as it is not currently supported with -mabicalls