aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2018-02-08 09:06:33 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2018-02-08 09:06:33 +0000
commit66a90e86694bdcfc674bfa5951d10088fc5b41a8 (patch)
treedab98eb6e79d3bf8ebe3ae7cfc624718b2f0fb30
parentf986f7e4bbeba1a8478ccc88aebc34d3eb97286b (diff)
downloadgcc-66a90e86694bdcfc674bfa5951d10088fc5b41a8.zip
gcc-66a90e86694bdcfc674bfa5951d10088fc5b41a8.tar.gz
gcc-66a90e86694bdcfc674bfa5951d10088fc5b41a8.tar.bz2
re PR c++/83204 (c++ -std=c++14 ICE in maybe_undo_parenthesized_ref, at cp/semantics.c:1694)
/cp 2018-02-08 Paolo Carlini <paolo.carlini@oracle.com> PR c++/83204 * pt.c (tsubst_copy_and_build): Use force_paren_expr for INDIRECT_REF. /testsuite 2018-02-08 Paolo Carlini <paolo.carlini@oracle.com> PR c++/83204 * g++.dg/cpp0x/lambda/lambda-ice25.C: New. From-SVN: r257478
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice25.C27
4 files changed, 39 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0b710e9..b898ba1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/83204
+ * pt.c (tsubst_copy_and_build): Use force_paren_expr for INDIRECT_REF.
+
2018-02-07 Jakub Jelinek <jakub@redhat.com>
PR c++/84082
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 0d9e153..a9e4770 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -17224,8 +17224,8 @@ tsubst_copy_and_build (tree t,
r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
complain|decltype_flag);
- if (TREE_CODE (r) == INDIRECT_REF)
- REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
+ if (REF_PARENTHESIZED_P (t))
+ r = force_paren_expr (r);
RETURN (r);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 22ec5d1..16f2b1a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/83204
+ * g++.dg/cpp0x/lambda/lambda-ice25.C: New.
+
2018-02-07 Will Schmidt <will_schmidt@vnet.ibm.com>
* gcc.target/powerpc/vsxcopy.c: Update scan-assembler stanzas.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice25.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice25.C
new file mode 100644
index 0000000..1a33fb1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice25.C
@@ -0,0 +1,27 @@
+// PR c++/83204
+// { dg-do compile { target c++11 } }
+
+int rand();
+
+template<typename T>
+struct s
+{
+ int count() { return rand(); }
+};
+
+template<typename v>
+void f(s<v> a)
+{
+ int const x = a.count();
+ int r = 0;
+ auto l = [&](int& r)
+ {
+ for(int y = 0, yend = (x); y < yend; ++y)
+ {
+ r += y;
+ }
+ };
+ l(r);
+}
+
+template void f(s<float>);