Unify our computation of the type of a captured reference to a
variable; it was previously duplicated, and one of the copies failed
to account for outer non-mutable lambda captures.
llvm-svn: 150872
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p16.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p16.cpp
index 58fa766..1723ee3 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p16.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p16.cpp
@@ -13,4 +13,7 @@
[x] { // expected-error{{call to deleted constructor of 'const X'}}
}();
}();
+
+ int a;
+ [=]{ [&] { int&x = a; }(); }(); // expected-error{{binding of reference to type 'int' to a value of type 'const int' drops qualifiers}}
}
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p18.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p18.cpp
index 03cbe32..e935613 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p18.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p18.cpp
@@ -17,12 +17,12 @@
const int &irc = i;
[=,&irc,&ir] {
+ static_assert(is_same<decltype(((r))), float const&>::value,
+ "should be const float&");
static_assert(is_same<decltype(x), float>::value, "should be float");
static_assert(is_same<decltype((x)), const float&>::value,
"should be const float&");
static_assert(is_same<decltype(r), float&>::value, "should be float&");
- static_assert(is_same<decltype(((r))), float const&>::value,
- "should be const float&");
static_assert(is_same<decltype(ir), int&>::value, "should be int&");
static_assert(is_same<decltype((ir)), int&>::value, "should be int&");
static_assert(is_same<decltype(irc), const int&>::value,