This revision was automatically updated to reflect the committed changes. Closed by commit rG96e675bdd5c8: [clang][ASTImporter] Add import support for SourceLocExpr. (authored by balazske).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D98876/new/ https://reviews.llvm.org/D98876 Files: clang/lib/AST/ASTImporter.cpp clang/unittests/AST/ASTImporterTest.cpp Index: clang/unittests/AST/ASTImporterTest.cpp =================================================================== --- clang/unittests/AST/ASTImporterTest.cpp +++ clang/unittests/AST/ASTImporterTest.cpp @@ -246,6 +246,24 @@ EXPECT_FALSE(path.hasCycleAtBack()); } +const internal::VariadicDynCastAllOfMatcher<Stmt, SourceLocExpr> sourceLocExpr; + +AST_MATCHER_P(SourceLocExpr, hasBuiltinStr, StringRef, Str) { + return Node.getBuiltinStr() == Str; +} + +TEST_P(ImportExpr, ImportSourceLocExpr) { + MatchVerifier<Decl> Verifier; + testImport("void declToImport() { (void)__builtin_FILE(); }", Lang_CXX03, "", + Lang_CXX03, Verifier, + functionDecl(hasDescendant( + sourceLocExpr(hasBuiltinStr("__builtin_FILE"))))); + testImport("void declToImport() { (void)__builtin_COLUMN(); }", Lang_CXX03, + "", Lang_CXX03, Verifier, + functionDecl(hasDescendant( + sourceLocExpr(hasBuiltinStr("__builtin_COLUMN"))))); +} + TEST_P(ImportExpr, ImportStringLiteral) { MatchVerifier<Decl> Verifier; testImport("void declToImport() { (void)\"foo\"; }", Lang_CXX03, "", Index: clang/lib/AST/ASTImporter.cpp =================================================================== --- clang/lib/AST/ASTImporter.cpp +++ clang/lib/AST/ASTImporter.cpp @@ -574,6 +574,7 @@ // Importing expressions ExpectedStmt VisitExpr(Expr *E); + ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E); ExpectedStmt VisitVAArgExpr(VAArgExpr *E); ExpectedStmt VisitChooseExpr(ChooseExpr *E); ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E); @@ -6483,6 +6484,21 @@ return make_error<ImportError>(ImportError::UnsupportedConstruct); } +ExpectedStmt ASTNodeImporter::VisitSourceLocExpr(SourceLocExpr *E) { + Error Err = Error::success(); + auto BLoc = importChecked(Err, E->getBeginLoc()); + auto RParenLoc = importChecked(Err, E->getEndLoc()); + if (Err) + return std::move(Err); + auto ParentContextOrErr = Importer.ImportContext(E->getParentContext()); + if (!ParentContextOrErr) + return ParentContextOrErr.takeError(); + + return new (Importer.getToContext()) + SourceLocExpr(Importer.getToContext(), E->getIdentKind(), BLoc, RParenLoc, + *ParentContextOrErr); +} + ExpectedStmt ASTNodeImporter::VisitVAArgExpr(VAArgExpr *E) { Error Err = Error::success();
Index: clang/unittests/AST/ASTImporterTest.cpp =================================================================== --- clang/unittests/AST/ASTImporterTest.cpp +++ clang/unittests/AST/ASTImporterTest.cpp @@ -246,6 +246,24 @@ EXPECT_FALSE(path.hasCycleAtBack()); } +const internal::VariadicDynCastAllOfMatcher<Stmt, SourceLocExpr> sourceLocExpr; + +AST_MATCHER_P(SourceLocExpr, hasBuiltinStr, StringRef, Str) { + return Node.getBuiltinStr() == Str; +} + +TEST_P(ImportExpr, ImportSourceLocExpr) { + MatchVerifier<Decl> Verifier; + testImport("void declToImport() { (void)__builtin_FILE(); }", Lang_CXX03, "", + Lang_CXX03, Verifier, + functionDecl(hasDescendant( + sourceLocExpr(hasBuiltinStr("__builtin_FILE"))))); + testImport("void declToImport() { (void)__builtin_COLUMN(); }", Lang_CXX03, + "", Lang_CXX03, Verifier, + functionDecl(hasDescendant( + sourceLocExpr(hasBuiltinStr("__builtin_COLUMN"))))); +} + TEST_P(ImportExpr, ImportStringLiteral) { MatchVerifier<Decl> Verifier; testImport("void declToImport() { (void)\"foo\"; }", Lang_CXX03, "", Index: clang/lib/AST/ASTImporter.cpp =================================================================== --- clang/lib/AST/ASTImporter.cpp +++ clang/lib/AST/ASTImporter.cpp @@ -574,6 +574,7 @@ // Importing expressions ExpectedStmt VisitExpr(Expr *E); + ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E); ExpectedStmt VisitVAArgExpr(VAArgExpr *E); ExpectedStmt VisitChooseExpr(ChooseExpr *E); ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E); @@ -6483,6 +6484,21 @@ return make_error<ImportError>(ImportError::UnsupportedConstruct); } +ExpectedStmt ASTNodeImporter::VisitSourceLocExpr(SourceLocExpr *E) { + Error Err = Error::success(); + auto BLoc = importChecked(Err, E->getBeginLoc()); + auto RParenLoc = importChecked(Err, E->getEndLoc()); + if (Err) + return std::move(Err); + auto ParentContextOrErr = Importer.ImportContext(E->getParentContext()); + if (!ParentContextOrErr) + return ParentContextOrErr.takeError(); + + return new (Importer.getToContext()) + SourceLocExpr(Importer.getToContext(), E->getIdentKind(), BLoc, RParenLoc, + *ParentContextOrErr); +} + ExpectedStmt ASTNodeImporter::VisitVAArgExpr(VAArgExpr *E) { Error Err = Error::success();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits