[expr.prim.lambda]p4, including the current suggested resolution of core isue 975, which allows multiple return statements so long as the types match. ExtWarn when user code is actually making use of this extension. llvm-svn: 150168
43 lines
882 B
C++
43 lines
882 B
C++
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
|
|
|
|
void missing_lambda_declarator() {
|
|
[](){}();
|
|
}
|
|
|
|
template<typename T> T get();
|
|
|
|
void infer_void_return_type(int i) {
|
|
if (i > 17)
|
|
return []() { }();
|
|
|
|
if (i > 11)
|
|
return []() { return; }();
|
|
|
|
return [](int x) {
|
|
switch (x) {
|
|
case 0: return get<void>();
|
|
case 1: return;
|
|
}
|
|
}(7);
|
|
}
|
|
|
|
struct X { };
|
|
|
|
X infer_X_return_type(X x) {
|
|
return [&x](int y) { // expected-warning{{omitted result type}}
|
|
if (y > 0)
|
|
return X();
|
|
else
|
|
return x;
|
|
}(5);
|
|
}
|
|
|
|
X infer_X_return_type_fail(X x) {
|
|
return [x](int y) { // expected-warning{{omitted result type}}
|
|
if (y > 0)
|
|
return X();
|
|
else // FIXME: shouldn't mention blocks
|
|
return x; // expected-error{{return type 'const X' must match previous return type 'X' when block literal has unspecified explicit return type}}
|
|
}(5);
|
|
}
|