diff options
Diffstat (limited to 'clang/unittests/AST/ASTImporterVisibilityTest.cpp')
| -rw-r--r-- | clang/unittests/AST/ASTImporterVisibilityTest.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/clang/unittests/AST/ASTImporterVisibilityTest.cpp b/clang/unittests/AST/ASTImporterVisibilityTest.cpp index a4d242d3bbf..95b7c4c920a 100644 --- a/clang/unittests/AST/ASTImporterVisibilityTest.cpp +++ b/clang/unittests/AST/ASTImporterVisibilityTest.cpp @@ -31,6 +31,10 @@ struct GetVarPattern { using DeclTy = VarDecl; BindableMatcher<Decl> operator()() { return varDecl(hasName("v")); } }; +struct GetClassPattern { + using DeclTy = CXXRecordDecl; + BindableMatcher<Decl> operator()() { return cxxRecordDecl(hasName("X")); } +}; // Values for the value-parameterized test fixtures. // FunctionDecl: @@ -41,6 +45,9 @@ const auto *AnonF = "namespace { void f(); }"; const auto *ExternV = "extern int v;"; const auto *StaticV = "static int v;"; const auto *AnonV = "namespace { extern int v; }"; +// CXXRecordDecl: +const auto *ExternC = "class X;"; +const auto *AnonC = "namespace { class X; }"; // First value in tuple: Compile options. // Second value in tuple: Source code to be used in the test. @@ -84,14 +91,19 @@ protected: // Manual instantiation of the fixture with each type. using ImportFunctionsVisibilityChain = ImportVisibilityChain<GetFunPattern>; using ImportVariablesVisibilityChain = ImportVisibilityChain<GetVarPattern>; -// Value-parameterized test for the first type. +using ImportClassesVisibilityChain = ImportVisibilityChain<GetClassPattern>; +// Value-parameterized test for functions. TEST_P(ImportFunctionsVisibilityChain, ImportChain) { TypedTest_ImportChain(); } -// Value-parameterized test for the second type. +// Value-parameterized test for variables. TEST_P(ImportVariablesVisibilityChain, ImportChain) { TypedTest_ImportChain(); } +// Value-parameterized test for classes. +TEST_P(ImportClassesVisibilityChain, ImportChain) { + TypedTest_ImportChain(); +} // Automatic instantiation of the value-parameterized tests. INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportFunctionsVisibilityChain, @@ -110,6 +122,11 @@ INSTANTIATE_TEST_CASE_P( // provided but they must have the same linkage. See also the test // ImportVariableChainInC which test for this special C Lang case. ::testing::Values(ExternV, AnonV)), ); +INSTANTIATE_TEST_CASE_P( + ParameterizedTests, ImportClassesVisibilityChain, + ::testing::Combine( + DefaultTestValuesForRunOptions, + ::testing::Values(ExternC, AnonC)), ); // First value in tuple: Compile options. // Second value in tuple: Tuple with informations for the test. @@ -169,6 +186,7 @@ protected: }; using ImportFunctionsVisibility = ImportVisibility<GetFunPattern>; using ImportVariablesVisibility = ImportVisibility<GetVarPattern>; +using ImportClassesVisibility = ImportVisibility<GetClassPattern>; // FunctionDecl. TEST_P(ImportFunctionsVisibility, ImportAfter) { @@ -184,6 +202,13 @@ TEST_P(ImportVariablesVisibility, ImportAfter) { TEST_P(ImportVariablesVisibility, ImportAfterImport) { TypedTest_ImportAfterImport(); } +// CXXRecordDecl. +TEST_P(ImportClassesVisibility, ImportAfter) { + TypedTest_ImportAfter(); +} +TEST_P(ImportClassesVisibility, ImportAfterImport) { + TypedTest_ImportAfterImport(); +} const bool ExpectLink = true; const bool ExpectNotLink = false; @@ -214,6 +239,14 @@ INSTANTIATE_TEST_CASE_P( std::make_tuple(AnonV, ExternV, ExpectNotLink), std::make_tuple(AnonV, StaticV, ExpectNotLink), std::make_tuple(AnonV, AnonV, ExpectNotLink))), ); +INSTANTIATE_TEST_CASE_P( + ParameterizedTests, ImportClassesVisibility, + ::testing::Combine( + DefaultTestValuesForRunOptions, + ::testing::Values(std::make_tuple(ExternC, ExternC, ExpectLink), + std::make_tuple(ExternC, AnonC, ExpectNotLink), + std::make_tuple(AnonC, ExternC, ExpectNotLink), + std::make_tuple(AnonC, AnonC, ExpectNotLink))), ); } // end namespace ast_matchers } // end namespace clang |

