diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp index 0719f4156f3d..5ed4c6153d32 100644 --- a/clang/lib/Sema/SemaLambda.cpp +++ b/clang/lib/Sema/SemaLambda.cpp @@ -181,12 +181,10 @@ Optional clang::getStackIndexOfNearestEnclosingCaptureCapableLambda( return FailDistance; const unsigned IndexOfCaptureReadyLambda = OptionalStackIndex.getValue(); - assert( - ((IndexOfCaptureReadyLambda != (FunctionScopes.size() - 1)) || - (S.getCurGenericLambda() && S.getCurGenericLambda()->ImpCaptureStyle != - sema::LambdaScopeInfo::ImpCap_None)) && - "The capture ready lambda for a potential capture can only be the " - "current lambda if it is a generic lambda with an implicit capture"); + assert(((IndexOfCaptureReadyLambda != (FunctionScopes.size() - 1)) || + S.getCurGenericLambda()) && + "The capture ready lambda for a potential capture can only be the " + "current lambda if it is a generic lambda with an implicit capture"); const sema::LambdaScopeInfo *const CaptureReadyLambdaLSI = cast(FunctionScopes[IndexOfCaptureReadyLambda]); diff --git a/clang/test/SemaCXX/cxx1y-init-captures.cpp b/clang/test/SemaCXX/cxx1y-init-captures.cpp index 2cb4d31ffc4b..046773f6113d 100644 --- a/clang/test/SemaCXX/cxx1y-init-captures.cpp +++ b/clang/test/SemaCXX/cxx1y-init-captures.cpp @@ -32,11 +32,18 @@ namespace variadic_expansion { void h(int i, char c) { g(i, c); } //expected-note{{in instantiation}} } +namespace simple_init_captures { + void test() { + int i; + auto L = [i](auto a) { return i + a; }; + L(3.14); + } +} namespace odr_use_within_init_capture { int test() { - + { // no captures const int x = 10; auto L = [z = x + 2](int a) {