Author: arphaman Date: Wed May 10 11:21:00 2017 New Revision: 302689 URL: http://llvm.org/viewvc/llvm-project?rev=302689&view=rev Log: [AST] RecursiveASTVisitor should not crash on lambdas with type attributes
rdar://31960860 Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h cfe/trunk/unittests/Tooling/RecursiveASTVisitorTest.cpp Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=302689&r1=302688&r2=302689&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original) +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Wed May 10 11:21:00 2017 @@ -2326,7 +2326,7 @@ DEF_TRAVERSE_STMT(LambdaExpr, { } TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc(); - FunctionProtoTypeLoc Proto = TL.castAs<FunctionProtoTypeLoc>(); + FunctionProtoTypeLoc Proto = TL.getAsAdjusted<FunctionProtoTypeLoc>(); if (S->hasExplicitParameters() && S->hasExplicitResultType()) { // Visit the whole type. Modified: cfe/trunk/unittests/Tooling/RecursiveASTVisitorTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/RecursiveASTVisitorTest.cpp?rev=302689&r1=302688&r2=302689&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/RecursiveASTVisitorTest.cpp (original) +++ cfe/trunk/unittests/Tooling/RecursiveASTVisitorTest.cpp Wed May 10 11:21:00 2017 @@ -52,6 +52,14 @@ TEST(RecursiveASTVisitor, TraverseLambda EXPECT_TRUE(Visitor.allBodiesHaveBeenTraversed()); } +TEST(RecursiveASTVisitor, VisitsAttributedLambdaExpr) { + LambdaExprVisitor Visitor; + Visitor.ExpectMatch("", 1, 12); + EXPECT_TRUE(Visitor.runOver( + "void f() { [] () __attribute__ (( fastcall )) { return; }(); }", + LambdaExprVisitor::Lang_CXX14)); +} + // Matches the (optional) capture-default of a lambda-introducer. class LambdaDefaultCaptureVisitor : public ExpectedLocationVisitor<LambdaDefaultCaptureVisitor> { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits