ahatanak updated this revision to Diff 75819. ahatanak marked 2 inline comments as done. ahatanak added a comment.
Skip the step to correct typo if ParseInitializer returns ExprError(). Add a test case that exercises the change. https://reviews.llvm.org/D25206 Files: lib/Parse/ParseExprCXX.cpp test/SemaCXX/lambda-expressions.cpp Index: test/SemaCXX/lambda-expressions.cpp =================================================================== --- test/SemaCXX/lambda-expressions.cpp +++ test/SemaCXX/lambda-expressions.cpp @@ -525,3 +525,18 @@ decltype(a)::D b; } } + +namespace PR30566 { +int name1; // expected-note {{'name1' declared here}} + +struct S1 { + template<class T> + S1(T t) { s = sizeof(t); } + int s; +}; + +void foo1() { + auto s0 = S1{[name=]() {}}; // expected-error 2 {{expected expression}} + auto s1 = S1{[name=name]() {}}; // expected-error {{use of undeclared identifier 'name'; did you mean 'name1'?}} +} +} Index: lib/Parse/ParseExprCXX.cpp =================================================================== --- lib/Parse/ParseExprCXX.cpp +++ lib/Parse/ParseExprCXX.cpp @@ -948,6 +948,8 @@ SourceLocation StartLoc = Tok.getLocation(); InMessageExpressionRAIIObject MaybeInMessageExpression(*this, true); Init = ParseInitializer(); + if (!Init.isInvalid()) + Init = Actions.CorrectDelayedTyposInExpr(Init.get()); if (Tok.getLocation() != StartLoc) { // Back out the lexing of the token after the initializer.
Index: test/SemaCXX/lambda-expressions.cpp =================================================================== --- test/SemaCXX/lambda-expressions.cpp +++ test/SemaCXX/lambda-expressions.cpp @@ -525,3 +525,18 @@ decltype(a)::D b; } } + +namespace PR30566 { +int name1; // expected-note {{'name1' declared here}} + +struct S1 { + template<class T> + S1(T t) { s = sizeof(t); } + int s; +}; + +void foo1() { + auto s0 = S1{[name=]() {}}; // expected-error 2 {{expected expression}} + auto s1 = S1{[name=name]() {}}; // expected-error {{use of undeclared identifier 'name'; did you mean 'name1'?}} +} +} Index: lib/Parse/ParseExprCXX.cpp =================================================================== --- lib/Parse/ParseExprCXX.cpp +++ lib/Parse/ParseExprCXX.cpp @@ -948,6 +948,8 @@ SourceLocation StartLoc = Tok.getLocation(); InMessageExpressionRAIIObject MaybeInMessageExpression(*this, true); Init = ParseInitializer(); + if (!Init.isInvalid()) + Init = Actions.CorrectDelayedTyposInExpr(Init.get()); if (Tok.getLocation() != StartLoc) { // Back out the lexing of the token after the initializer.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits