aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2015-06-19 14:15:24 -0400
committerJason Merrill <jason@gcc.gnu.org>2015-06-19 14:15:24 -0400
commit892562cf28252bd284a4cd4d249f20c1755a6b5b (patch)
treeaa67d5c31de99dae3b0e493981ed7f4a13ffc9b2 /gcc
parent2e562987080cf23cb6b9c147cd4a975faac6e2ea (diff)
downloadgcc-892562cf28252bd284a4cd4d249f20c1755a6b5b.zip
gcc-892562cf28252bd284a4cd4d249f20c1755a6b5b.tar.gz
gcc-892562cf28252bd284a4cd4d249f20c1755a6b5b.tar.bz2
re PR c++/65843 (multiple use of const variable in lamba in template function causes compile error)
PR c++/65843 * pt.c (tsubst_copy_and_build): Register a capture proxy in local_specializations. From-SVN: r224676
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-rep1.C14
3 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index eb8d97a..4f2d4a6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2015-06-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/65843
+ * pt.c (tsubst_copy_and_build): Register a capture proxy in
+ local_specializations.
+
2015-06-17 Jason Merrill <jason@redhat.com>
PR c++/66001
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index ccce90d..5dd5bfe 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -15665,7 +15665,11 @@ tsubst_copy_and_build (tree t,
r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
}
else if (outer_automatic_var_p (r))
- r = process_outer_var_ref (r, complain);
+ {
+ r = process_outer_var_ref (r, complain);
+ if (is_capture_proxy (r))
+ register_local_specialization (r, t);
+ }
if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
/* If the original type was a reference, we'll be wrapped in
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-rep1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-rep1.C
new file mode 100644
index 0000000..a35060b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-rep1.C
@@ -0,0 +1,14 @@
+// PR c++/65843
+// { dg-do compile { target c++11 } }
+
+template<class T>
+void test(T b)
+{
+ const int a = b;
+ [&] () { return a, a; }();
+}
+
+int main() {
+ test(1);
+ return 0;
+}