From: Dodji Seketeli Date: Thu, 20 Nov 2008 00:00:39 +0000 (+0000) Subject: re PR c++/37142 (ICE: in dependent_type_p, at cp/pt.c:15585) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8320114a44cb39824d8ba98c3799e4c5f028b750;p=gcc.git re PR c++/37142 (ICE: in dependent_type_p, at cp/pt.c:15585) gcc/testsuite/ChangeLog: 2008-11-19 Dodji Seketeli PR c++/37142 * g++.dg/template/crash85.C: New test. gcc/cp/ChangeLog 2008-11-19 Dodji Seketeli PR c++/37142 * pt.c (coerce_template_template_parm): Use the more robust uses_template_parms instead of dependent_type_p. From-SVN: r142025 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 73e07d73f9d..fe2eab6fd74 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-11-19 Dodji Seketeli + + PR c++/37142 + * pt.c (coerce_template_template_parm): Use the more robust + uses_template_parms instead of dependent_type_p. + 2008-11-19 Dodji Seketeli PR c++/35405 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 96c510f3d4c..127d37c833d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4688,7 +4688,7 @@ coerce_template_template_parm (tree parm, D d; i.e. the parameter list of TT depends on earlier parameters. */ - if (!dependent_type_p (TREE_TYPE (arg)) + if (!uses_template_parms (TREE_TYPE (arg)) && !same_type_p (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl), TREE_TYPE (arg))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9c4ca41bb15..39a10724adc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2,6 +2,11 @@ * gcc.c-torture/compile/20081119-1.c: New test. +2008-11-19 Dodji Seketeli + + PR c++/37142 + * g++.dg/template/crash85.C: New test. + 2008-11-19 Dodji Seketeli PR c++/35405 diff --git a/gcc/testsuite/g++.dg/template/crash85.C b/gcc/testsuite/g++.dg/template/crash85.C new file mode 100644 index 00000000000..e0b6ee19881 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash85.C @@ -0,0 +1,15 @@ +// Contributed by Dodji Seketeli +// Origin: PR c++/37142 +// { dg-do compile } + +template class W> struct A {}; + +template struct B {}; + +int +main () +{ + A a; + return 0; +} +