[llvm-branch-commits] [clang] 35621cc - [clang][cli] CompilerInvocationTest: add tests for boolean options
Jan Svoboda via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Dec 9 00:03:41 PST 2020
Author: Jan Svoboda
Date: 2020-12-09T08:58:46+01:00
New Revision: 35621cc2e3b3778abc2bacf37f3b1e9dfac52895
URL: https://github.com/llvm/llvm-project/commit/35621cc2e3b3778abc2bacf37f3b1e9dfac52895
DIFF: https://github.com/llvm/llvm-project/commit/35621cc2e3b3778abc2bacf37f3b1e9dfac52895.diff
LOG: [clang][cli] CompilerInvocationTest: add tests for boolean options
Add more tests of the command line marshalling infrastructure.
The new tests now make a "round-trip": from arguments, to CompilerInvocation instance to arguments again in a single test case.
The TODOs are resolved in a follow-up patch.
Depends on D92830.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D92774
Added:
Modified:
clang/unittests/Frontend/CompilerInvocationTest.cpp
Removed:
################################################################################
diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp
index c3bdd6bff65c..b0fe11dd8d5b 100644
--- a/clang/unittests/Frontend/CompilerInvocationTest.cpp
+++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp
@@ -77,6 +77,150 @@ TEST_F(CommandLineTest, BoolOptionDefaultTrueSingleFlagUnknownPresent) {
ASSERT_TRUE(Invocation.getFrontendOpts().UseTemporary);
}
+// Boolean option with a keypath that defaults to true.
+// The flag with negative spelling can set the keypath to false.
+// The flag with positive spelling can reset the keypath to true.
+
+TEST_F(CommandLineTest, BoolOptionDefaultTruePresentNone) {
+ const char *Args[] = {""};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_TRUE(Invocation.getCodeGenOpts().Autolink);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultTruePresentNegChange) {
+ const char *Args[] = {"-fno-autolink"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_FALSE(Invocation.getCodeGenOpts().Autolink);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultTruePresentPosReset) {
+ const char *Args[] = {"-fautolink"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_TRUE(Diags->hasErrorOccurred()); // Driver-only flag.
+ ASSERT_TRUE(Invocation.getCodeGenOpts().Autolink);
+}
+
+// Boolean option with a keypath that defaults to false.
+// The flag with negative spelling can set the keypath to true.
+// The flag with positive spelling can reset the keypath to false.
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNone) {
+ const char *Args[] = {""};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_FALSE(Invocation.getCodeGenOpts().NoInlineLineTables);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNegChange) {
+ const char *Args[] = {"-gno-inline-line-tables"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_TRUE(Invocation.getCodeGenOpts().NoInlineLineTables);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentPosReset) {
+ const char *Args[] = {"-ginline-line-tables"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_TRUE(Diags->hasErrorOccurred()); // Driver-only flag.
+ ASSERT_FALSE(Invocation.getCodeGenOpts().NoInlineLineTables);
+}
+
+// Boolean option with a keypath that defaults to false.
+// The flag with positive spelling can set the keypath to true.
+// The flag with negative spelling can reset the keypath to false.
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNoneX) {
+ const char *Args[] = {""};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_FALSE(Invocation.getCodeGenOpts().CodeViewGHash);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentPosChange) {
+ const char *Args[] = {"-gcodeview-ghash"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_TRUE(Invocation.getCodeGenOpts().CodeViewGHash);
+
+ // TODO: Test argument generation.
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultFalsePresentNegReset) {
+ const char *Args[] = {"-gno-codeview-ghash"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_TRUE(Diags->hasErrorOccurred()); // Driver-only flag.
+ ASSERT_FALSE(Invocation.getCodeGenOpts().CodeViewGHash);
+}
+
+// Boolean option with a keypath that defaults to an arbitrary expression.
+// The flag with positive spelling can set the keypath to true.
+// The flag with negative spelling can set the keypath to false.
+
+// NOTE: The following tests need to be updated when we start enabling the new
+// pass manager by default.
+
+TEST_F(CommandLineTest, BoolOptionDefaultArbitraryTwoFlagsPresentNone) {
+ const char *Args = {""};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_FALSE(Invocation.getCodeGenOpts().ExperimentalNewPassManager);
+
+ Invocation.generateCC1CommandLine(GeneratedArgs, *this);
+ ASSERT_THAT(GeneratedArgs,
+ Not(Contains(StrEq("-fexperimental-new-pass-manager"))));
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultArbitraryTwoFlagsPresentPos) {
+ const char *Args[] = {"-fexperimental-new-pass-manager"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_TRUE(Invocation.getCodeGenOpts().ExperimentalNewPassManager);
+
+ Invocation.generateCC1CommandLine(GeneratedArgs, *this);
+ ASSERT_THAT(GeneratedArgs,
+ Contains(StrEq("-fexperimental-new-pass-manager")));
+ ASSERT_THAT(GeneratedArgs,
+ Not(Contains(StrEq("-fno-experimental-new-pass-manager"))));
+}
+
+TEST_F(CommandLineTest, BoolOptionDefaultArbitraryTwoFlagsPresentNeg) {
+ const char *Args[] = {"-fno-experimental-new-pass-manager"};
+
+ CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
+ ASSERT_FALSE(Diags->hasErrorOccurred());
+ ASSERT_FALSE(Invocation.getCodeGenOpts().ExperimentalNewPassManager);
+
+ Invocation.generateCC1CommandLine(GeneratedArgs, *this);
+ ASSERT_THAT(GeneratedArgs,
+ Contains(StrEq("-fno-experimental-new-pass-manager")));
+ ASSERT_THAT(GeneratedArgs,
+ Not(Contains(StrEq("-fexperimental-new-pass-manager"))));
+}
+
TEST_F(CommandLineTest, CanGenerateCC1CommandLineFlag) {
const char *Args[] = {"-fmodules-strict-context-hash"};
More information about the llvm-branch-commits
mailing list