[clang] e60de8c - Add missing test
Stephen Kelly via cfe-commits
cfe-commits at lists.llvm.org
Sun May 24 14:52:30 PDT 2020
Author: Stephen Kelly
Date: 2020-05-24T22:50:50+01:00
New Revision: e60de8c825d3087dca26d97985febbf97e179311
URL: https://github.com/llvm/llvm-project/commit/e60de8c825d3087dca26d97985febbf97e179311
DIFF: https://github.com/llvm/llvm-project/commit/e60de8c825d3087dca26d97985febbf97e179311.diff
LOG: Add missing test
Added:
Modified:
clang/lib/AST/Expr.cpp
clang/unittests/AST/ASTTraverserTest.cpp
clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index b9b7ca95b218..4c175fff6421 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -2909,7 +2909,8 @@ Expr *Expr::IgnoreUnlessSpelledInSource() {
Expr *LastE = nullptr;
while (E != LastE) {
LastE = E;
- E = IgnoreExprNodes(E, IgnoreImplicitSingleStep, IgnoreImpCastsExtraSingleStep,
+ E = IgnoreExprNodes(E, IgnoreImplicitSingleStep,
+ IgnoreImpCastsExtraSingleStep,
IgnoreParensOnlySingleStep);
auto SR = E->getSourceRange();
diff --git a/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp
index affbbe76f0d2..5585238939fe 100644
--- a/clang/unittests/AST/ASTTraverserTest.cpp
+++ b/clang/unittests/AST/ASTTraverserTest.cpp
@@ -291,6 +291,13 @@ void conversionOperator()
C1 c1 = (*c2);
}
+template <unsigned alignment>
+void template_test() {
+ static_assert(alignment, "");
+}
+void actual_template_test() {
+ template_test<4>();
+}
)cpp");
{
@@ -408,6 +415,31 @@ VarDecl 'c1'
VarDecl 'c1'
`-UnaryOperator
`-DeclRefExpr 'c2'
+)cpp");
+ }
+
+ {
+ auto FN = ast_matchers::match(
+ functionDecl(hasName("template_test"),
+ hasDescendant(staticAssertDecl().bind("staticAssert"))),
+ AST->getASTContext());
+ EXPECT_EQ(FN.size(), 2u);
+
+ EXPECT_EQ(dumpASTString(TK_AsIs, FN[1].getNodeAs<Decl>("staticAssert")),
+ R"cpp(
+StaticAssertDecl
+|-ImplicitCastExpr
+| `-SubstNonTypeTemplateParmExpr
+| `-IntegerLiteral
+`-StringLiteral
+)cpp");
+
+ EXPECT_EQ(dumpASTString(TK_IgnoreUnlessSpelledInSource,
+ FN[1].getNodeAs<Decl>("staticAssert")),
+ R"cpp(
+StaticAssertDecl
+|-IntegerLiteral
+`-StringLiteral
)cpp");
}
}
diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
index e8b0a312d0a3..6bd8fcf66498 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -1867,6 +1867,26 @@ void conversionOperator()
hasDescendant(varDecl(
hasName("c1"), hasInitializer(unaryOperator(
hasOperatorName("*")))))))));
+
+ Code = R"cpp(
+
+template <unsigned alignment>
+void template_test() {
+ static_assert(alignment, "");
+}
+void actual_template_test() {
+ template_test<4>();
+}
+
+)cpp";
+ EXPECT_TRUE(matches(
+ Code,
+ traverse(TK_AsIs,
+ staticAssertDecl(has(implicitCastExpr(has(
+ substNonTypeTemplateParmExpr(has(integerLiteral())))))))));
+
+ EXPECT_TRUE(matches(Code, traverse(TK_IgnoreUnlessSpelledInSource,
+ staticAssertDecl(has(integerLiteral())))));
}
template <typename MatcherT>
More information about the cfe-commits
mailing list