[clang] 789215d - [ASTImporter] Add support for importing fixed point literals
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 15 08:37:01 PDT 2020
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, );
More information about the cfe-commits
mailing list