[SyntaxTree] Ignore implicit leaf `CXXConstructExpr`

Differential Revision: https://reviews.llvm.org/D86700
This commit is contained in:
Eduardo Caldas 2020-08-27 09:44:09 +00:00
parent 2325d6b42f
commit 46f4439dc9
2 changed files with 12 additions and 11 deletions

View File

@ -1132,6 +1132,14 @@ public:
return true;
}
bool WalkUpFromCXXConstructExpr(CXXConstructExpr *S) {
// Ignore the implicit calls to default constructors.
if ((S->getNumArgs() == 0 || isa<CXXDefaultArgExpr>(S->getArg(0))) &&
S->getParenOrBraceRange().isInvalid())
return true;
return RecursiveASTVisitor::WalkUpFromCXXConstructExpr(S);
}
bool TraverseCXXOperatorCallExpr(CXXOperatorCallExpr *S) {
// To construct a syntax tree of the same shape for calls to built-in and
// user-defined operators, ignore the `DeclRefExpr` that refers to the

View File

@ -548,9 +548,6 @@ namespace n {
struct S { };
}
void test() {
// FIXME: Remove the `UnknownExpression` wrapping `s1` and `s2`. This
// `UnknownExpression` comes from a leaf `CXXConstructExpr` in the
// ClangAST. We need to ignore leaf implicit nodes.
[[::n::S s1]];
[[n::S s2]];
}
@ -564,8 +561,7 @@ SimpleDeclaration
| `-'::' ListDelimiter
|-'S'
`-SimpleDeclarator Declarator
`-UnknownExpression
`-'s1'
`-'s1'
)txt",
R"txt(
SimpleDeclaration
@ -575,8 +571,7 @@ SimpleDeclaration
| `-'::' ListDelimiter
|-'S'
`-SimpleDeclarator Declarator
`-UnknownExpression
`-'s2'
`-'s2'
)txt"}));
}
@ -608,8 +603,7 @@ SimpleDeclaration
| `-'::' ListDelimiter
|-'S'
`-SimpleDeclarator Declarator
`-UnknownExpression
`-'s1'
`-'s1'
)txt",
R"txt(
SimpleDeclaration
@ -623,8 +617,7 @@ SimpleDeclaration
| `-'::' ListDelimiter
|-'S'
`-SimpleDeclarator Declarator
`-UnknownExpression
`-'s2'
`-'s2'
)txt"}));
}