diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4544,7 +4544,10 @@ return CreateFromArgsImpl(Invocation, CommandLineArgs, Diags, Argv0); }, [](CompilerInvocation &Invocation, SmallVectorImpl &Args, - StringAllocator SA) { Invocation.generateCC1CommandLine(Args, SA); }, + StringAllocator SA) { + Args.push_back("-cc1"); + Invocation.generateCC1CommandLine(Args, SA); + }, Invocation, DummyInvocation, CommandLineArgs, Diags, Argv0); } diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp --- a/clang/unittests/Frontend/CompilerInvocationTest.cpp +++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp @@ -23,6 +23,7 @@ using ::testing::Contains; using ::testing::HasSubstr; using ::testing::StrEq; +using ::testing::StartsWith; namespace { class CommandLineTest : public ::testing::Test { @@ -145,6 +146,26 @@ ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fno-temp-file"))); } +TEST_F(CommandLineTest, CC1FlagPresentWhenDoingRoundTrip) { + const char *Args[] = {"-cc1", "-round-trip-args"}; + + ASSERT_TRUE(CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags)); + + ASSERT_THAT(std::string(Invocation.getCodeGenOpts().CmdArgs.begin(), + Invocation.getCodeGenOpts().CmdArgs.end()), + StartsWith("-cc1")); +} + +TEST_F(CommandLineTest, CC1FlagPresentWhenNotDoingRoundTrip) { + const char *Args[] = {"-cc1", "-no-round-trip-args"}; + + ASSERT_TRUE(CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags)); + + ASSERT_THAT(std::string(Invocation.getCodeGenOpts().CmdArgs.begin(), + Invocation.getCodeGenOpts().CmdArgs.end()), + StartsWith("-cc1")); +} + TEST_F(CommandLineTest, BoolOptionDefaultTrueSingleFlagUnknownPresent) { const char *Args[] = {"-ftemp-file"};