@@ -9681,37 +9681,106 @@ AST_MATCHER_P(EnumDecl, hasEnumConstName, StringRef, ConstName) {
9681
9681
return false ;
9682
9682
}
9683
9683
9684
- TEST_P (ASTImporterOptionSpecificTestBase, ImportAnonymousEnum) {
9684
+ TEST_P (ASTImporterOptionSpecificTestBase, ImportAnonymousEnums) {
9685
+ const char *Code =
9686
+ R"(
9687
+ struct A {
9688
+ enum { E1, E2 } x;
9689
+ enum { E3, E4 } y;
9690
+ };
9691
+ )" ;
9692
+ Decl *FromTU = getTuDecl (Code, Lang_CXX11);
9693
+ auto *FromEnumE1 = FirstDeclMatcher<EnumDecl>().match (
9694
+ FromTU, enumDecl (hasEnumConstName (" E1" )));
9695
+ auto *ImportedEnumE1 = Import (FromEnumE1, Lang_CXX11);
9696
+ EXPECT_TRUE (ImportedEnumE1);
9697
+ auto *FromEnumE3 = FirstDeclMatcher<EnumDecl>().match (
9698
+ FromTU, enumDecl (hasEnumConstName (" E3" )));
9699
+ auto *ImportedEnumE3 = Import (FromEnumE3, Lang_CXX11);
9700
+ EXPECT_TRUE (ImportedEnumE3);
9701
+ EXPECT_NE (ImportedEnumE1, ImportedEnumE3);
9702
+ }
9703
+
9704
+ TEST_P (ASTImporterOptionSpecificTestBase, ImportFreeStandingAnonymousEnums) {
9705
+ const char *Code =
9706
+ R"(
9707
+ struct A {
9708
+ enum { E1, E2 };
9709
+ enum { E3, E4 };
9710
+ };
9711
+ )" ;
9712
+ Decl *FromTU = getTuDecl (Code, Lang_CXX11);
9713
+ auto *FromEnumE1 = FirstDeclMatcher<EnumDecl>().match (
9714
+ FromTU, enumDecl (hasEnumConstName (" E1" )));
9715
+ auto *ImportedEnumE1 = Import (FromEnumE1, Lang_CXX11);
9716
+ EXPECT_TRUE (ImportedEnumE1);
9717
+ auto *FromEnumE3 = FirstDeclMatcher<EnumDecl>().match (
9718
+ FromTU, enumDecl (hasEnumConstName (" E3" )));
9719
+ auto *ImportedEnumE3 = Import (FromEnumE3, Lang_CXX11);
9720
+ EXPECT_TRUE (ImportedEnumE3);
9721
+ EXPECT_NE (ImportedEnumE1, ImportedEnumE3);
9722
+ }
9723
+
9724
+ TEST_P (ASTImporterOptionSpecificTestBase, ImportExistingAnonymousEnums) {
9685
9725
const char *ToCode =
9686
9726
R"(
9687
9727
struct A {
9688
- enum { E1, E2} x;
9689
- enum { E3, E4} y;
9728
+ enum { E1, E2 } x;
9729
+ enum { E3, E4 } y;
9690
9730
};
9691
9731
)" ;
9692
9732
Decl *ToTU = getToTuDecl (ToCode, Lang_CXX11);
9693
- auto *ToE1 = FirstDeclMatcher<EnumDecl>().match (
9733
+ auto *ToEnumE1 = FirstDeclMatcher<EnumDecl>().match (
9694
9734
ToTU, enumDecl (hasEnumConstName (" E1" )));
9695
- auto *ToE3 = FirstDeclMatcher<EnumDecl>().match (
9735
+ auto *ToEnumE3 = FirstDeclMatcher<EnumDecl>().match (
9696
9736
ToTU, enumDecl (hasEnumConstName (" E3" )));
9697
9737
const char *Code =
9698
9738
R"(
9699
9739
struct A {
9700
- enum { E1, E2} x;
9701
- enum { E3, E4} y;
9740
+ enum { E1, E2 } x;
9741
+ enum { E3, E4 } y;
9702
9742
};
9703
9743
)" ;
9704
9744
Decl *FromTU = getTuDecl (Code, Lang_CXX11);
9705
- auto *FromE1 = FirstDeclMatcher<EnumDecl>().match (
9745
+ auto *FromEnumE1 = FirstDeclMatcher<EnumDecl>().match (
9706
9746
FromTU, enumDecl (hasEnumConstName (" E1" )));
9747
+ auto *ImportedEnumE1 = Import (FromEnumE1, Lang_CXX11);
9748
+ ASSERT_TRUE (ImportedEnumE1);
9749
+ EXPECT_EQ (ImportedEnumE1, ToEnumE1);
9750
+ auto *FromEnumE3 = FirstDeclMatcher<EnumDecl>().match (
9751
+ FromTU, enumDecl (hasEnumConstName (" E3" )));
9752
+ auto *ImportedEnumE3 = Import (FromEnumE3, Lang_CXX11);
9753
+ ASSERT_TRUE (ImportedEnumE3);
9754
+ EXPECT_EQ (ImportedEnumE3, ToEnumE3);
9755
+ }
9756
+
9757
+ TEST_P (ASTImporterOptionSpecificTestBase, ImportExistingEmptyAnonymousEnums) {
9758
+ const char *ToCode =
9759
+ R"(
9760
+ struct A {
9761
+ enum {};
9762
+ };
9763
+ )" ;
9764
+ Decl *ToTU = getToTuDecl (ToCode, Lang_CXX11);
9765
+ auto *ToE1 = FirstDeclMatcher<EnumDecl>().match (ToTU, enumDecl ());
9766
+ const char *Code =
9767
+ R"(
9768
+ struct A {
9769
+ enum {};
9770
+ enum {};
9771
+ };
9772
+ )" ;
9773
+ Decl *FromTU = getTuDecl (Code, Lang_CXX11);
9774
+ auto *FromE1 = FirstDeclMatcher<EnumDecl>().match (FromTU, enumDecl ());
9707
9775
auto *ImportedE1 = Import (FromE1, Lang_CXX11);
9708
9776
ASSERT_TRUE (ImportedE1);
9709
9777
EXPECT_EQ (ImportedE1, ToE1);
9710
- auto *FromE3 = FirstDeclMatcher<EnumDecl>().match (
9711
- FromTU, enumDecl (hasEnumConstName (" E3" )));
9712
- auto *ImportedE3 = Import (FromE3, Lang_CXX11);
9713
- ASSERT_TRUE (ImportedE3);
9714
- EXPECT_EQ (ImportedE3, ToE3);
9778
+ auto *FromE2 = LastDeclMatcher<EnumDecl>().match (FromTU, enumDecl ());
9779
+ ASSERT_NE (FromE1, FromE2);
9780
+ auto *ImportedE2 = Import (FromE2, Lang_CXX11);
9781
+ ASSERT_TRUE (ImportedE2);
9782
+ // FIXME: These should not be equal, or the import should fail.
9783
+ EXPECT_EQ (ImportedE2, ToE1);
9715
9784
}
9716
9785
9717
9786
INSTANTIATE_TEST_SUITE_P (ParameterizedTests, ASTImporterLookupTableTest,
0 commit comments