forked from OSchip/llvm-project
Rewrite r228138 to be somewhat saner.
While probably technically correct, the solution r228138 was quite hard to read/understand. This should be simpler. Also added a test to ensure that we are still visiting the syntactic form as well. llvm-svn: 228144
This commit is contained in:
parent
aa748a8db5
commit
774e6b55b3
|
@ -2032,20 +2032,21 @@ DEF_TRAVERSE_STMT(CXXStaticCastExpr, {
|
|||
// to the syntactic form.
|
||||
template <typename Derived>
|
||||
bool RecursiveASTVisitor<Derived>::TraverseInitListExpr(InitListExpr *S) {
|
||||
if (InitListExpr *Syn = S->getSyntacticForm())
|
||||
S = Syn;
|
||||
TRY_TO(WalkUpFromInitListExpr(S));
|
||||
// All we need are the default actions. FIXME: use a helper function.
|
||||
for (Stmt::child_range range = S->children(); range; ++range) {
|
||||
TRY_TO(TraverseStmt(*range));
|
||||
}
|
||||
if (InitListExpr *Syn = S->getSemanticForm()) {
|
||||
InitListExpr *Syn = S->isSemanticForm() ? S->getSyntacticForm() : S;
|
||||
if (Syn) {
|
||||
TRY_TO(WalkUpFromInitListExpr(Syn));
|
||||
// All we need are the default actions. FIXME: use a helper function.
|
||||
for (Stmt::child_range range = Syn->children(); range; ++range) {
|
||||
TRY_TO(TraverseStmt(*range));
|
||||
}
|
||||
}
|
||||
InitListExpr *Sem = S->isSemanticForm() ? S : S->getSemanticForm();
|
||||
if (Sem) {
|
||||
TRY_TO(WalkUpFromInitListExpr(Sem));
|
||||
for (Stmt::child_range range = Sem->children(); range; ++range) {
|
||||
TRY_TO(TraverseStmt(*range));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -3148,6 +3148,8 @@ TEST(InitListExpression, MatchesInitListExpression) {
|
|||
"void f();"
|
||||
"S s[1] = { &f };",
|
||||
declRefExpr(to(functionDecl(hasName("f"))))));
|
||||
EXPECT_TRUE(
|
||||
matches("int i[1] = {42, [0] = 43};", integerLiteral(equals(42))));
|
||||
}
|
||||
|
||||
TEST(UsingDeclaration, MatchesUsingDeclarations) {
|
||||
|
|
Loading…
Reference in New Issue