Author: Stephen Kelly Date: 2020-05-24T12:36:16+01:00 New Revision: 04ed532ef0ce76d53ca456cbc581756bb01d30e7
URL: https://github.com/llvm/llvm-project/commit/04ed532ef0ce76d53ca456cbc581756bb01d30e7 DIFF: https://github.com/llvm/llvm-project/commit/04ed532ef0ce76d53ca456cbc581756bb01d30e7.diff LOG: Fix skip-invisible with overloaded method calls Added: Modified: clang/lib/AST/Expr.cpp clang/unittests/AST/ASTTraverserTest.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index f173c2408866..0184140ab07e 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -2931,8 +2931,10 @@ Expr *Expr::IgnoreUnlessSpelledInSource() { continue; } if (auto *PE = dyn_cast<ParenExpr>(ExprNode)) { - E = PE; - continue; + if (PE->getSourceRange() == C->getSourceRange()) { + E = PE; + continue; + } } ExprNode = ExprNode->IgnoreParenImpCasts(); if (ExprNode->getSourceRange() == SR) diff --git a/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp index f56a49bf8e51..affbbe76f0d2 100644 --- a/clang/unittests/AST/ASTTraverserTest.cpp +++ b/clang/unittests/AST/ASTTraverserTest.cpp @@ -265,6 +265,9 @@ TEST(Traverse, IgnoreUnlessSpelledInSourceVars) { struct String { String(const char*, int = -1) {} + + int overloaded() const; + int& overloaded(); }; void stringConstruct() @@ -273,6 +276,12 @@ void stringConstruct() s = "bar"; } +void overloadCall() +{ + String s = "foo"; + (s).overloaded(); +} + struct C1 {}; struct C2 { operator C1(); }; @@ -331,6 +340,46 @@ FunctionDecl 'stringConstruct' )cpp"); } + { + auto FN = + ast_matchers::match(functionDecl(hasName("overloadCall")).bind("fn"), + AST->getASTContext()); + EXPECT_EQ(FN.size(), 1u); + + EXPECT_EQ(dumpASTString(TK_AsIs, FN[0].getNodeAs<Decl>("fn")), + R"cpp( +FunctionDecl 'overloadCall' +`-CompoundStmt + |-DeclStmt + | `-VarDecl 's' + | `-ExprWithCleanups + | `-CXXConstructExpr + | `-MaterializeTemporaryExpr + | `-ImplicitCastExpr + | `-CXXConstructExpr + | |-ImplicitCastExpr + | | `-StringLiteral + | `-CXXDefaultArgExpr + `-CXXMemberCallExpr + `-MemberExpr + `-ParenExpr + `-DeclRefExpr 's' +)cpp"); + + EXPECT_EQ(dumpASTString(TK_IgnoreUnlessSpelledInSource, + FN[0].getNodeAs<Decl>("fn")), + R"cpp( +FunctionDecl 'overloadCall' +`-CompoundStmt + |-DeclStmt + | `-VarDecl 's' + | `-StringLiteral + `-CXXMemberCallExpr + `-MemberExpr + `-DeclRefExpr 's' +)cpp"); + } + { auto FN = ast_matchers::match( functionDecl(hasName("conversionOperator"), _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits