mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-13 07:14:25 +08:00
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
This commit is contained in:
parent
f9dd72da28
commit
2303a07914
@ -1,3 +1,9 @@
|
||||
2002-10-16 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/7478
|
||||
* cvt.c (convert_to_reference): Allow references as the incoming
|
||||
type.
|
||||
|
||||
2002-10-16 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/7524
|
||||
|
10
gcc/cp/cvt.c
10
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);
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2002-10-16 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/7478
|
||||
* g++.dg/template/ref1.C: New test.
|
||||
|
||||
2002-10-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* gcc.c-torture/execute/20020720-1.x: Don't XFAIL for mips.
|
||||
|
3
gcc/testsuite/g++.dg/template/ref1.C
Normal file
3
gcc/testsuite/g++.dg/template/ref1.C
Normal file
@ -0,0 +1,3 @@
|
||||
class a {} a1;
|
||||
template <a & p> class b { public: b() { static_cast <a &> (p); }; };
|
||||
int main() { b <a1> b1; };
|
Loading…
Reference in New Issue
Block a user