Author: Vince Bridgers Date: 2020-04-15T10:36:44-05:00 New Revision: 789215dc0db174c9fdd273436fdd60d8289a9fc0
URL: https://github.com/llvm/llvm-project/commit/789215dc0db174c9fdd273436fdd60d8289a9fc0 DIFF: https://github.com/llvm/llvm-project/commit/789215dc0db174c9fdd273436fdd60d8289a9fc0.diff LOG: [ASTImporter] Add support for importing fixed point literals Summary: This patch adds support for importing fixed point literals, following up to https://reviews.llvm.org/D46915 specifically for importing AST. Reviewers: martong, leonardchan, ebevhan, a.sidorin, shafik Reviewed By: martong Subscribers: balazske, rnkovacs, teemperor, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77721 Added: Modified: clang/include/clang/ASTMatchers/ASTMatchers.h clang/lib/AST/ASTImporter.cpp clang/lib/ASTMatchers/ASTMatchersInternal.cpp clang/unittests/AST/ASTImporterFixtures.h clang/unittests/AST/ASTImporterTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index 070c38295ba7..ce702bc44edd 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -2271,6 +2271,10 @@ extern const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral> extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImaginaryLiteral> imaginaryLiteral; +/// Matches fixed point literals +extern const internal::VariadicDynCastAllOfMatcher<Stmt, FixedPointLiteral> + fixedPointLiteral; + /// Matches user defined literal operator call. /// /// Example match: "foo"_suffix diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 73622f22bcec..3a499c7f0dff 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -588,6 +588,7 @@ namespace clang { ExpectedStmt VisitIntegerLiteral(IntegerLiteral *E); ExpectedStmt VisitFloatingLiteral(FloatingLiteral *E); ExpectedStmt VisitImaginaryLiteral(ImaginaryLiteral *E); + ExpectedStmt VisitFixedPointLiteral(FixedPointLiteral *E); ExpectedStmt VisitCharacterLiteral(CharacterLiteral *E); ExpectedStmt VisitStringLiteral(StringLiteral *E); ExpectedStmt VisitCompoundLiteralExpr(CompoundLiteralExpr *E); @@ -6503,6 +6504,20 @@ ExpectedStmt ASTNodeImporter::VisitImaginaryLiteral(ImaginaryLiteral *E) { *ToSubExprOrErr, *ToTypeOrErr); } +ExpectedStmt ASTNodeImporter::VisitFixedPointLiteral(FixedPointLiteral *E) { + auto ToTypeOrErr = import(E->getType()); + if (!ToTypeOrErr) + return ToTypeOrErr.takeError(); + + ExpectedSLoc ToLocationOrErr = import(E->getLocation()); + if (!ToLocationOrErr) + return ToLocationOrErr.takeError(); + + return new (Importer.getToContext()) FixedPointLiteral( + Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr, + Importer.getToContext().getFixedPointScale(*ToTypeOrErr)); +} + ExpectedStmt ASTNodeImporter::VisitCharacterLiteral(CharacterLiteral *E) { ExpectedType ToTypeOrErr = import(E->getType()); if (!ToTypeOrErr) diff --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp index c20e8422be46..40bd439f79fa 100644 --- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp +++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -804,6 +804,8 @@ const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral> integerLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral> floatLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, ImaginaryLiteral> imaginaryLiteral; +const internal::VariadicDynCastAllOfMatcher<Stmt, FixedPointLiteral> + fixedPointLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral> userDefinedLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr> diff --git a/clang/unittests/AST/ASTImporterFixtures.h b/clang/unittests/AST/ASTImporterFixtures.h index 34cef16712d7..05d789ffcaf6 100644 --- a/clang/unittests/AST/ASTImporterFixtures.h +++ b/clang/unittests/AST/ASTImporterFixtures.h @@ -66,10 +66,13 @@ class CompilerOptionSpecificTest : public ::testing::Test { } }; -const auto DefaultTestValuesForRunOptions = ::testing::Values( +const auto DefaultTestArrayForRunOptions = std::array<ArgVector, 4>{ ArgVector(), ArgVector{"-fdelayed-template-parsing"}, ArgVector{"-fms-compatibility"}, - ArgVector{"-fdelayed-template-parsing", "-fms-compatibility"}); + ArgVector{"-fdelayed-template-parsing", "-fms-compatibility"}}; + +const auto DefaultTestValuesForRunOptions = + ::testing::ValuesIn(DefaultTestArrayForRunOptions); // This class provides generic methods to write tests which can check internal // attributes of AST nodes like getPreviousDecl(), isVirtual(), etc. Also, diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index ea4a49a1c5cb..9f35a86e2937 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -255,6 +255,7 @@ static const RecordDecl *getRecordDeclOfFriend(FriendDecl *FD) { struct ImportExpr : TestImportBase {}; struct ImportType : TestImportBase {}; struct ImportDecl : TestImportBase {}; +struct ImportFixedPointExpr : ImportExpr {}; struct CanonicalRedeclChain : ASTImporterOptionSpecificTestBase {}; @@ -527,6 +528,14 @@ TEST_P(ImportExpr, ImportFloatinglLiteralExpr) { floatLiteral(equals(1.0e-5f), hasType(asString("float")))))); } +TEST_P(ImportFixedPointExpr, ImportFixedPointerLiteralExpr) { + MatchVerifier<Decl> Verifier; + testImport("void declToImport() { (void)1.0k; }", Lang_C, "", Lang_C, + Verifier, functionDecl(hasDescendant(fixedPointLiteral()))); + testImport("void declToImport() { (void)0.75r; }", Lang_C, "", Lang_C, + Verifier, functionDecl(hasDescendant(fixedPointLiteral()))); +} + TEST_P(ImportExpr, ImportImaginaryLiteralExpr) { MatchVerifier<Decl> Verifier; testImport( @@ -5922,6 +5931,17 @@ TEST_P(ASTImporterOptionSpecificTestBase, ImportExprOfAlignmentAttr) { EXPECT_TRUE(ToA); } +template <typename T> +auto ExtendWithOptions(const T &Values, const ArgVector &Args) { + auto Copy = Values; + for (ArgVector &ArgV : Copy) { + for (const std::string &Arg : Args) { + ArgV.push_back(Arg); + } + } + return ::testing::ValuesIn(Copy); +} + INSTANTIATE_TEST_CASE_P(ParameterizedTests, ASTImporterLookupTableTest, DefaultTestValuesForRunOptions, ); @@ -5931,6 +5951,10 @@ INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportPath, INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportExpr, DefaultTestValuesForRunOptions, ); +INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportFixedPointExpr, + ExtendWithOptions(DefaultTestArrayForRunOptions, + ArgVector{"-ffixed-point"}), ); + INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportType, DefaultTestValuesForRunOptions, ); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits