]> granicus.if.org Git - clang/commitdiff
Fix an assertion introduced by my previous refactoring.
authorFaisal Vali <faisalv@yahoo.com>
Sun, 8 Dec 2013 15:00:29 +0000 (15:00 +0000)
committerFaisal Vali <faisalv@yahoo.com>
Sun, 8 Dec 2013 15:00:29 +0000 (15:00 +0000)
Add back the test that was triggering the assertion (which I removed mistakenly thinking it was triggering just a warning and not an assertion).  My error was brought to my attention by Rafael (Thanks!).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196721 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaLambda.cpp
test/SemaCXX/cxx1y-init-captures.cpp

index 0719f4156f3db5ea3c54ae47435f79bacb011274..5ed4c6153d329127d8163a792949c41c250b51e1 100644 (file)
@@ -181,12 +181,10 @@ Optional<unsigned> 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<sema::LambdaScopeInfo>(FunctionScopes[IndexOfCaptureReadyLambda]);
index 2cb4d31ffc4bd514bf9b601ac9ef73d07cc59e71..046773f6113d6dfab6dc48ea9ba8b3a5a587ec0c 100644 (file)
@@ -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) {