Avoid conflicts between debug-info and pseudo-probe profiling

After D93264, using both -fdebug-info-for-profiling and
-fpseudo-probe-for-profiling will cause the compiler to crash.
Diagnose these conflicting options in the driver.

Also, the existing CodeGen test was using the driver when it should be
running cc1.

Differential Revision: https://reviews.llvm.org/D96354
This commit is contained in:
Paul Robinson 2021-02-09 14:41:52 -08:00
parent b5f3383152
commit 5ea2d4fa48
3 changed files with 14 additions and 1 deletions

View File

@ -3746,6 +3746,12 @@ static void renderDebugOptions(const ToolChain &TC, const Driver &D,
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(

View File

@ -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

View File

@ -0,0 +1,7 @@
// RUN: %clang -### -fpseudo-probe-for-profiling %s 2>&1 | FileCheck %s --check-prefix=YESPROBE
// RUN: %clang -### -fno-pseudo-probe-for-profiling %s 2>&1 | FileCheck %s --check-prefix=NOPROBE
// RUN: %clang -### -fpseudo-probe-for-profiling -fdebug-info-for-profiling %s 2>&1 | FileCheck %s --check-prefix=CONFLICT
// YESPROBE: -fpseudo-probe-for-profiling
// NOPROBE-NOT: -fpseudo-probe-for-profiling
// CONFLICT: invalid argument