aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-02-08 04:52:11 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-02-08 04:52:11 -0500
commit84d594c6487e4502beb72786cdd82c234b549a98 (patch)
tree94dfb5054a25fdb1f7ebfa1de74bda0ab3a2ea2c /gcc
parent75685ef74d410e993ed35c43ac76a56f00b4ddaf (diff)
downloadgcc-84d594c6487e4502beb72786cdd82c234b549a98.zip
gcc-84d594c6487e4502beb72786cdd82c234b549a98.tar.gz
gcc-84d594c6487e4502beb72786cdd82c234b549a98.tar.bz2
re PR c++/52035 (internal compiler error: tree code ‘template_type_parm’ is not supported in LTO streams)
PR c++/52035 * pt.c (tsubst): Strip uninstantiated typedef. From-SVN: r184000
Diffstat (limited to 'gcc')
-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/lto/README4
-rw-r--r--gcc/testsuite/g++.dg/lto/pr52035_0.C14
5 files changed, 29 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6cc2742..b506f4b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/52035
+ * pt.c (tsubst): Strip uninstantiated typedef.
+
2012-02-06 Jason Merrill <jason@redhat.com>
PR c++/52088
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 4c93b31..a0b2a0b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -11178,7 +11178,9 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
complain | tf_ignore_bad_quals);
return r;
}
- /* Else we must be instantiating the typedef, so fall through. */
+ else
+ /* We don't have an instantiation yet, so drop the typedef. */
+ t = DECL_ORIGINAL_TYPE (decl);
}
if (type
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3fc813a..9f50b24 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/52035
+ * g++.dg/lto/pr52035_0.C: New.
+
2012-02-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* gfortran.dg/guality/pr41558.f90: Use lp64 instead of hppa*64*-*-*.
diff --git a/gcc/testsuite/g++.dg/lto/README b/gcc/testsuite/g++.dg/lto/README
index 5fa3123..1a13dd9 100644
--- a/gcc/testsuite/g++.dg/lto/README
+++ b/gcc/testsuite/g++.dg/lto/README
@@ -24,9 +24,9 @@ $ g++ -o <executable> a_0.o a_1.o a_2.o
Tests that do not need more than one file are a special case
where there is a single file named 'foo_0.C'.
-The only supported dg-lto-do option are 'compile', 'run' and 'link'.
+The only supported dg-lto-do option are 'assemble', 'run' and 'link'.
Additionally, these can only be used in the main file. If
-'compile' is used, only the individual object files are
+'assemble' is used, only the individual object files are
generated. If 'link' is used, the final executable is generated
but not executed (in this case, function main() needs to exist
but it does not need to do anything). If 'run' is used, the
diff --git a/gcc/testsuite/g++.dg/lto/pr52035_0.C b/gcc/testsuite/g++.dg/lto/pr52035_0.C
new file mode 100644
index 0000000..3de4ea5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr52035_0.C
@@ -0,0 +1,14 @@
+// PR c++/52035
+// { dg-lto-do assemble }
+
+template <typename T> struct QVector {
+ typedef T* iterator;
+ static void insert(int n);
+ typedef int size_type;
+};
+template <typename T> void QVector<T>::insert(size_type n) {}
+void error()
+{
+ int n;
+ QVector<int>::insert(n);
+}