Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3746,6 +3746,12 @@ ArgStringList &CmdArgs, codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) { + // These two forms of profiling info can't be used together. + if (const Arg *A1 = Args.getLastArg(options::OPT_fpseudo_probe_for_profiling)) + if (const Arg *A2 = Args.getLastArg(options::OPT_fdebug_info_for_profiling)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << A1->getAsString(Args) << A2->getAsString(Args); + if (Args.hasFlag(options::OPT_fdebug_info_for_profiling, options::OPT_fno_debug_info_for_profiling, false) && checkDebugInfoOption( @@ -5727,10 +5733,6 @@ } Args.AddLastArg(CmdArgs, options::OPT_fprofile_remapping_file_EQ); - if (Args.hasFlag(options::OPT_fpseudo_probe_for_profiling, - options::OPT_fno_pseudo_probe_for_profiling, false)) - CmdArgs.push_back("-fpseudo-probe-for-profiling"); - RenderBuiltinOptions(TC, RawTriple, Args, CmdArgs); if (!Args.hasFlag(options::OPT_fassume_sane_operator_new, Index: clang/test/CodeGen/pseudo-probe-emit.c =================================================================== --- clang/test/CodeGen/pseudo-probe-emit.c +++ clang/test/CodeGen/pseudo-probe-emit.c @@ -1,4 +1,4 @@ -// RUN: %clang -O2 -fexperimental-new-pass-manager -fpseudo-probe-for-profiling -g -emit-llvm -S -o - %s | FileCheck %s +// RUN: %clang_cc1 -O2 -fno-legacy-pass-manager -fpseudo-probe-for-profiling -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s // Check the generation of pseudoprobe intrinsic call Index: clang/test/Driver/pseudo-probe.c =================================================================== --- /dev/null +++ clang/test/Driver/pseudo-probe.c @@ -0,0 +1,7 @@ +// RUN: %clang -### -fpseudo-probe-for-profiling 2>&1 | FileCheck %s --check-prefix=YESPROBE +// RUN: %clang -### -fno-pseudo-probe-for-profiling 2>&1 | FileCheck %s --check-prefix=NOPROBE +// RUN: %clang -### -fpseudo-probe-for-profiling -fdebug-info-for-profiling 2>&1 | FileCheck %s --check-prefix=CONFLICT + +// YESPROBE: -fpseudo-probe-for-profiling +// NOPROBE-NOT: -fpseudo-probe-for-profiling +// CONFLICT: invalid argument