From 2303a07914bc82ca17706fc15166bf40b940bfa7 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 17 Oct 2002 00:17:59 +0000 Subject: [PATCH] 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: r58230 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cvt.c | 10 ++++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/ref1.C | 3 +++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/ref1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 07b8732d933..80132effe86 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-10-16 Mark Mitchell + + PR c++/7478 + * cvt.c (convert_to_reference): Allow references as the incoming + type. + 2002-10-16 Mark Mitchell PR c++/7524 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 6905a049e45..7e31045a485 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -473,12 +473,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) @@ -488,6 +489,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 06461f7ac95..3f3cee43c78 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-10-16 Mark Mitchell + + PR c++/7478 + * g++.dg/template/ref1.C: New test. + 2002-10-16 Kaveh R. Ghazi * gcc.c-torture/execute/20020720-1.x: Don't XFAIL for mips. diff --git a/gcc/testsuite/g++.dg/template/ref1.C b/gcc/testsuite/g++.dg/template/ref1.C new file mode 100644 index 00000000000..3f133d488f5 --- /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; }; -- 2.30.2