diff options
author | Jason Merrill <jason@redhat.com> | 2012-02-08 04:52:11 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-02-08 04:52:11 -0500 |
commit | 84d594c6487e4502beb72786cdd82c234b549a98 (patch) | |
tree | 94dfb5054a25fdb1f7ebfa1de74bda0ab3a2ea2c /gcc | |
parent | 75685ef74d410e993ed35c43ac76a56f00b4ddaf (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/README | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/pr52035_0.C | 14 |
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); +} |