aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2017-10-30 19:16:29 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2017-10-30 19:16:29 +0000
commitbae0ffb560161297affa64d94aede0b8c5553a5f (patch)
tree795f87fb0cbf1566ce93c91214caa18eed1c7b43 /gcc
parentff6304874e9f0c56ef675deb7f71124348fae922 (diff)
downloadgcc-bae0ffb560161297affa64d94aede0b8c5553a5f.zip
gcc-bae0ffb560161297affa64d94aede0b8c5553a5f.tar.gz
gcc-bae0ffb560161297affa64d94aede0b8c5553a5f.tar.bz2
re PR c++/82085 (ICE: Template variable reference used in nested template alias)
/cp 2017-10-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/82085 * pt.c (tsubst_copy_and_build, [INDIRECT_REF]): For a REFERENCE_REF_P, unconditionally call convert_from_reference. /testsuite 2017-10-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/82085 * g++.dg/cpp1y/var-templ56.C: New. From-SVN: r254239
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ56.C11
4 files changed, 23 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7630638..f1809f5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2017-10-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/82085
+ * pt.c (tsubst_copy_and_build, [INDIRECT_REF]): For a REFERENCE_REF_P,
+ unconditionally call convert_from_reference.
+
2017-10-30 Nathan Sidwell <nathan@acm.org>
* call.c (build_op_call_1): Test for FUNCTION_DECL in same manner
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 9457aea..8b89ca9 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -17079,8 +17079,7 @@ tsubst_copy_and_build (tree t,
/* A type conversion to reference type will be enclosed in
such an indirect ref, but the substitution of the cast
will have also added such an indirect ref. */
- if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
- r = convert_from_reference (r);
+ r = convert_from_reference (r);
}
else
r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ad5d917..40ef87e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/82085
+ * g++.dg/cpp1y/var-templ56.C: New.
+
2017-10-30 Nathan Sidwell <nathan@acm.org>
* g++.dg/other/operator2.C: Adjust diagnostic.
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ56.C b/gcc/testsuite/g++.dg/cpp1y/var-templ56.C
new file mode 100644
index 0000000..d0f762b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ56.C
@@ -0,0 +1,11 @@
+// PR c++/82085
+// { dg-do compile { target c++14 } }
+
+template <const char& V>
+using char_sequence_t = int;
+
+template <typename T>
+constexpr char name_of_v = 'x';
+
+template <typename T>
+using type = char_sequence_t<name_of_v<T>>;