forked from OSchip/llvm-project
[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
This commit is contained in:
parent
216d43053b
commit
35621cc2e3
|
@ -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"};
|
||||
|
||||
|
|
Loading…
Reference in New Issue