Index: lib/Parse/ParseDeclCXX.cpp =================================================================== --- lib/Parse/ParseDeclCXX.cpp +++ lib/Parse/ParseDeclCXX.cpp @@ -2824,6 +2824,9 @@ Parent = Parent->getParent(); if (Parent->isClassScope()) break; + // Classes defined inside lambda functions are local as well. + if (S->getFlags() & Scope::BlockScope) + break; } } } Index: test/SemaCXX/cxx1y-generic-lambdas.cpp =================================================================== --- test/SemaCXX/cxx1y-generic-lambdas.cpp +++ test/SemaCXX/cxx1y-generic-lambdas.cpp @@ -948,3 +948,30 @@ auto x = f(0)(); } + +namespace PR13987 { +class Enclosing { + void Method(char c = []()->char { + int d = []()->int { + struct LocalClass { + int Method() { return 0; } + }; + return 0; + }(); + return d; }() + ); +}; + + +class Enclosing2 { + void Method(char c = [](auto x)->char { + int d = []()->int { + struct LocalClass { + int Method() { return 0; } + }; + return 0; + }(); + return d; }(0) + ); +}; +}