Author: Paul Robinson Date: 2021-02-10T07:09:18-08:00 New Revision: 5ea2d4fa481160c9843b8651df265ce1fbfd9316
URL: https://github.com/llvm/llvm-project/commit/5ea2d4fa481160c9843b8651df265ce1fbfd9316 DIFF: https://github.com/llvm/llvm-project/commit/5ea2d4fa481160c9843b8651df265ce1fbfd9316.diff LOG: 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 Added: clang/test/Driver/pseudo-probe.c Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/CodeGen/pseudo-probe-emit.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 5df6238b211b..d2a9ea3c9ef8 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -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( diff --git a/clang/test/CodeGen/pseudo-probe-emit.c b/clang/test/CodeGen/pseudo-probe-emit.c index fccc8f04844d..5fe1d2384676 100644 --- a/clang/test/CodeGen/pseudo-probe-emit.c +++ b/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 diff --git a/clang/test/Driver/pseudo-probe.c b/clang/test/Driver/pseudo-probe.c new file mode 100644 index 000000000000..297992cfd1a1 --- /dev/null +++ b/clang/test/Driver/pseudo-probe.c @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits