[PATCH] D158808: [Clang] Modify Parser::ParseLambdaExpressionAfterIntroducer to check whether the lambda-declarator is valid
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 25 20:14:50 PDT 2023
shafik updated this revision to Diff 553692.
shafik added a comment.
- Move test to C++20 file
- Apply clang-format
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158808/new/
https://reviews.llvm.org/D158808
Files:
clang/lib/Parse/ParseExprCXX.cpp
clang/test/Parser/cxx2a-template-lambdas.cpp
clang/test/SemaCXX/subst-func-type-invalid-ret-type.cpp
Index: clang/test/SemaCXX/subst-func-type-invalid-ret-type.cpp
===================================================================
--- clang/test/SemaCXX/subst-func-type-invalid-ret-type.cpp
+++ clang/test/SemaCXX/subst-func-type-invalid-ret-type.cpp
@@ -5,12 +5,11 @@
template<typename T> T declval();
template <typename T>
-auto Call(T x) -> decltype(declval<T>()(0)) {} // expected-note{{candidate template ignored}}
+auto Call(T x) -> decltype(declval<T>()(0)) {}
class Status {};
void fun() {
// The Status() (instead of Status) here used to cause a crash.
Call([](auto x) -> Status() {}); // expected-error{{function cannot return function type 'Status ()}}
- // expected-error at -1{{no matching function for call to 'Call'}}
}
Index: clang/test/Parser/cxx2a-template-lambdas.cpp
===================================================================
--- clang/test/Parser/cxx2a-template-lambdas.cpp
+++ clang/test/Parser/cxx2a-template-lambdas.cpp
@@ -32,3 +32,11 @@
// expected-warning at -3 {{is a C++23 extension}}
// expected-warning at -3 {{is a C++23 extension}}
#endif
+
+namespace GH64962 {
+void f() {
+ [] <typename T>(T i) -> int[] // expected-error {{function cannot return array type 'int[]'}}
+ // extension-warning {{explicit template parameter list for lambdas is a C++20 extension}}
+ { return 3; } (v); // expected-error {{use of undeclared identifier 'v'}}
+}
+}
Index: clang/lib/Parse/ParseExprCXX.cpp
===================================================================
--- clang/lib/Parse/ParseExprCXX.cpp
+++ clang/lib/Parse/ParseExprCXX.cpp
@@ -1546,7 +1546,8 @@
TemplateParamScope.Exit();
LambdaScope.Exit();
- if (!Stmt.isInvalid() && !TrailingReturnType.isInvalid())
+ if (!Stmt.isInvalid() && !TrailingReturnType.isInvalid() &&
+ !D.isInvalidType())
return Actions.ActOnLambdaExpr(LambdaBeginLoc, Stmt.get(), getCurScope());
Actions.ActOnLambdaError(LambdaBeginLoc, getCurScope());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158808.553692.patch
Type: text/x-patch
Size: 1986 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230826/ab818cc3/attachment.bin>
More information about the cfe-commits
mailing list