diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 4336a25f091c4f..0720ed4bb94a8b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5972,8 +5972,14 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, 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)) + options::OPT_fno_pseudo_probe_for_profiling, false)) { CmdArgs.push_back("-fpseudo-probe-for-profiling"); + // Enforce -funique-internal-linkage-names if it's not explicitly turned + // off. + if (Args.hasFlag(options::OPT_funique_internal_linkage_names, + options::OPT_fno_unique_internal_linkage_names, true)) + CmdArgs.push_back("-funique-internal-linkage-names"); + } } RenderBuiltinOptions(TC, RawTriple, Args, CmdArgs); diff --git a/clang/test/Driver/pseudo-probe.c b/clang/test/Driver/pseudo-probe.c index 297992cfd1a158..79b23df557a6c8 100644 --- a/clang/test/Driver/pseudo-probe.c +++ b/clang/test/Driver/pseudo-probe.c @@ -1,7 +1,13 @@ // 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 +// RUN: %clang -### -fpseudo-probe-for-profiling -funique-internal-linkage-names %s 2>&1 | FileCheck %s --check-prefix=YESPROBE +// RUN: %clang -### -fpseudo-probe-for-profiling -fno-unique-internal-linkage-names %s 2>&1 | FileCheck %s --check-prefix=NONAME // YESPROBE: -fpseudo-probe-for-profiling +// YESPROBE: -funique-internal-linkage-names // NOPROBE-NOT: -fpseudo-probe-for-profiling +// NOPROBE-NOT: -funique-internal-linkage-names +// NONAME: -fpseudo-probe-for-profiling +// NONAME-NOT: -funique-internal-linkage-names // CONFLICT: invalid argument