diff options
-rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 27 | ||||
-rw-r--r-- | clang/test/Driver/mcount.c | 10 | ||||
-rw-r--r-- | clang/test/Driver/mfentry.c | 9 |
3 files changed, 34 insertions, 12 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 03100948f56..1b8eca0ea0d 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4986,18 +4986,27 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, const XRayArgs &XRay = TC.getXRayArgs(); XRay.addArgs(TC, Args, CmdArgs, InputType); - if (TC.SupportsProfiling()) + if (TC.SupportsProfiling()) { Args.AddLastArg(CmdArgs, options::OPT_pg); - if (TC.SupportsProfiling()) - Args.AddLastArg(CmdArgs, options::OPT_mfentry); - - if (TC.SupportsProfiling()) - Args.AddLastArg(CmdArgs, options::OPT_mnop_mcount); - - if (TC.SupportsProfiling()) { + llvm::Triple::ArchType Arch = TC.getArch(); + if (Arg *A = Args.getLastArg(options::OPT_mfentry)) { + if (Arch == llvm::Triple::systemz || Arch == llvm::Triple::x86 || + Arch == llvm::Triple::x86_64) + A->render(Args, CmdArgs); + else + D.Diag(diag::err_drv_unsupported_opt_for_target) + << A->getAsString(Args) << TripleStr; + } + if (Arg *A = Args.getLastArg(options::OPT_mnop_mcount)) { + if (Arch == llvm::Triple::systemz) + A->render(Args, CmdArgs); + else + D.Diag(diag::err_drv_unsupported_opt_for_target) + << A->getAsString(Args) << TripleStr; + } if (Arg *A = Args.getLastArg(options::OPT_mrecord_mcount)) { - if (TC.getArch() == llvm::Triple::systemz) + if (Arch == llvm::Triple::systemz) A->render(Args, CmdArgs); else D.Diag(diag::err_drv_unsupported_opt_for_target) diff --git a/clang/test/Driver/mcount.c b/clang/test/Driver/mcount.c index 7086abfc74b..a89150cb263 100644 --- a/clang/test/Driver/mcount.c +++ b/clang/test/Driver/mcount.c @@ -1,8 +1,12 @@ -// RUN: %clang -target s390x -c -### %s -mrecord-mcount 2>&1 | FileCheck %s +// RUN: %clang -target s390x -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck %s + +// CHECK: "-mnop-mcount" // CHECK: "-mrecord-mcount" -// RUN: %clang -target x86_64 -c -### %s -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR1 %s -// RUN: %clang -target aarch64 -c -### %s -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR2 %s +// RUN: %clang -target x86_64 -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR1 %s +// RUN: %clang -target aarch64 -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR2 %s +// ERR1: error: unsupported option '-mnop-mcount' for target 'x86_64' // ERR1: error: unsupported option '-mrecord-mcount' for target 'x86_64' +// ERR2: error: unsupported option '-mnop-mcount' for target 'aarch64' // ERR2: error: unsupported option '-mrecord-mcount' for target 'aarch64' diff --git a/clang/test/Driver/mfentry.c b/clang/test/Driver/mfentry.c new file mode 100644 index 00000000000..ee402ea1b73 --- /dev/null +++ b/clang/test/Driver/mfentry.c @@ -0,0 +1,9 @@ +// RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s + +// CHECK: "-mfentry" + +// RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s + +// ERR: error: unsupported option '-mfentry' for target 'powerpc64le' |