forked from OSchip/llvm-project
Removing the lambda extension warning concerning single return statements, as it no longer applies.
llvm-svn: 157943
This commit is contained in:
parent
5ef0e0b262
commit
f0b67b6f5c
|
@ -4330,10 +4330,6 @@ let CategoryName = "Lambda Issue" in {
|
|||
def note_lambda_decl : Note<"lambda expression begins here">;
|
||||
def err_lambda_unevaluated_operand : Error<
|
||||
"lambda expression in an unevaluated operand">;
|
||||
def ext_lambda_implies_void_return : ExtWarn<
|
||||
"C++11 requires lambda with omitted result type to consist of a single "
|
||||
"return statement">,
|
||||
InGroup<LambdaExtensions>;
|
||||
def err_lambda_return_init_list : Error<
|
||||
"cannot deduce lambda return type from initializer list">;
|
||||
def err_lambda_capture_default_arg : Error<
|
||||
|
|
|
@ -648,26 +648,6 @@ ExprResult Sema::ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body,
|
|||
// braced-init-list, the type void;
|
||||
if (LSI->ReturnType.isNull()) {
|
||||
LSI->ReturnType = Context.VoidTy;
|
||||
} else {
|
||||
// C++11 [expr.prim.lambda]p4:
|
||||
// - if the compound-statement is of the form
|
||||
//
|
||||
// { attribute-specifier-seq[opt] return expression ; }
|
||||
//
|
||||
// the type of the returned expression after
|
||||
// lvalue-to-rvalue conversion (4.1), array-to-pointer
|
||||
// conver- sion (4.2), and function-to-pointer conversion
|
||||
// (4.3);
|
||||
//
|
||||
// Since we're accepting the resolution to a post-C++11 core
|
||||
// issue with a non-trivial extension, provide a warning (by
|
||||
// default).
|
||||
CompoundStmt *CompoundBody = cast<CompoundStmt>(Body);
|
||||
if (!(CompoundBody->size() == 1 &&
|
||||
isa<ReturnStmt>(*CompoundBody->body_begin())) &&
|
||||
!Context.hasSameType(LSI->ReturnType, Context.VoidTy))
|
||||
Diag(IntroducerRange.getBegin(),
|
||||
diag::ext_lambda_implies_void_return);
|
||||
}
|
||||
|
||||
// Create a function type with the inferred return type.
|
||||
|
|
|
@ -210,6 +210,6 @@ int pr12325(int params) {
|
|||
|
||||
// Test lambda expressions with -Wuninitialized
|
||||
int test_lambda() {
|
||||
auto f1 = [] (int x, int y) { int z; return x + y + z; }; // expected-warning {{C++11 requires lambda with omitted result type to consist of a single return statement}} expected-warning{{variable 'z' is uninitialized when used here}} expected-note {{initialize the variable 'z' to silence this warning}}
|
||||
auto f1 = [] (int x, int y) { int z; return x + y + z; }; // expected-warning{{variable 'z' is uninitialized when used here}} expected-note {{initialize the variable 'z' to silence this warning}}
|
||||
return f1(1, 2);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue