From 6baa9769ed573741290fb186d02df7cf676fc8de Mon Sep 17 00:00:00 2001 From: Jan Svoboda Date: Tue, 8 Dec 2020 18:15:21 +0100 Subject: [clang][cli] Add flexible TableGen multiclass for boolean options This introduces more flexible multiclass for declaring two flags controlling the same boolean keypath. Compared to existing Opt{In,Out}FFlag multiclasses, the new syntax makes it easier to read option declarations and reason about the keypath. This also makes specifying common properties of both flags possible. I'm open to suggestions on the class names. Not 100% sure the benefits are worth the added complexity. Depends on D92774. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D92775 --- .../unittests/Frontend/CompilerInvocationTest.cpp | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'clang/unittests/Frontend/CompilerInvocationTest.cpp') diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp index d5b5d15..41da5af 100644 --- a/clang/unittests/Frontend/CompilerInvocationTest.cpp +++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp @@ -88,7 +88,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultTruePresentNone) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_TRUE(Invocation.getCodeGenOpts().Autolink); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fautolink")))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fno-autolink")))); } TEST_F(CommandLineTest, BoolOptionDefaultTruePresentNegChange) { @@ -98,7 +100,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultTruePresentNegChange) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_FALSE(Invocation.getCodeGenOpts().Autolink); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fno-autolink"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fautolink")))); } TEST_F(CommandLineTest, BoolOptionDefaultTruePresentPosReset) { @@ -120,7 +124,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNone) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_FALSE(Invocation.getCodeGenOpts().NoInlineLineTables); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-ginline-line-tables")))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-gno-inline-line-tables")))); } TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNegChange) { @@ -130,7 +136,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNegChange) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_TRUE(Invocation.getCodeGenOpts().NoInlineLineTables); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-gno-inline-line-tables"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-ginline-line-tables")))); } TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentPosReset) { @@ -152,7 +160,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNoneX) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_FALSE(Invocation.getCodeGenOpts().CodeViewGHash); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-gcodeview-ghash")))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-gno-codeview-ghash")))); } TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentPosChange) { @@ -162,7 +172,9 @@ TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentPosChange) { ASSERT_FALSE(Diags->hasErrorOccurred()); ASSERT_TRUE(Invocation.getCodeGenOpts().CodeViewGHash); - // TODO: Test argument generation. + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-gcodeview-ghash"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-gno-codeview-ghash")))); } TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNegReset) { -- cgit v1.1