From: Mark Mitchell Date: Thu, 17 Oct 2002 00:15:39 +0000 (+0000) Subject: re PR c++/7478 (internal compiler error on static_cast inside template) X-Git-Tag: releases/gcc-3.2.1~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f2f3e3510b61449be56292350dd568ee920c3bd;p=thirdparty%2Fgcc.git re PR c++/7478 (internal compiler error on static_cast inside template) PR c++/7478 * cvt.c (convert_to_reference): Allow references as the incoming type. PR c++/7478 * g++.dg/template/ref1.C: New test. From-SVN: r58229 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3cc4ee584f20..48bf9dd942cf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,10 @@ 2002-10-16 Mark Mitchell - PR c++/8134. + PR c++/7478 + * cvt.c (convert_to_reference): Allow references as the incoming + type. + + PR c++/8134 * tree.c (zero_init_p): Always return 1. PR c++/7524 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 9b4f68f2fa11..5e6c92c2bacf 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -464,12 +464,13 @@ convert_to_reference (reftype, expr, convtype, flags, decl) tree decl; { register tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype)); - register tree intype = TREE_TYPE (expr); + register tree intype; tree rval = NULL_TREE; tree rval_as_conversion = NULL_TREE; int i; - if (TREE_CODE (type) == FUNCTION_TYPE && intype == unknown_type_node) + if (TREE_CODE (type) == FUNCTION_TYPE + && TREE_TYPE (expr) == unknown_type_node) { expr = instantiate_type (type, expr, (flags & LOOKUP_COMPLAIN) @@ -479,6 +480,11 @@ convert_to_reference (reftype, expr, convtype, flags, decl) intype = TREE_TYPE (expr); } + else + { + expr = convert_from_reference (expr); + intype = TREE_TYPE (expr); + } my_friendly_assert (TREE_CODE (intype) != REFERENCE_TYPE, 364); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80f004dd64ac..7445b2c1127e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2002-10-16 Mark Mitchell + PR c++/7478 + * g++.dg/template/ref1.C: New test. + PR c++/8134 * g++.dg/init/pm1.C: XFAIL it. diff --git a/gcc/testsuite/g++.dg/template/ref1.C b/gcc/testsuite/g++.dg/template/ref1.C new file mode 100644 index 000000000000..3f133d488f5d --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ref1.C @@ -0,0 +1,3 @@ +class a {} a1; +template class b { public: b() { static_cast (p); }; }; +int main() { b b1; };