]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/7478 (internal compiler error on static_cast inside template)
authorMark Mitchell <mark@codesourcery.com>
Thu, 17 Oct 2002 00:15:39 +0000 (00:15 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 17 Oct 2002 00:15:39 +0000 (00:15 +0000)
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

gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/ref1.C [new file with mode: 0644]

index 3cc4ee584f20a2ab7a39a0a805ead6c04f668900..48bf9dd942cf1522d0622d8a7bf257b4e2f46394 100644 (file)
@@ -1,6 +1,10 @@
 2002-10-16  Mark Mitchell  <mark@codesourcery.com>
 
-       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
index 9b4f68f2fa1136ba71a5e044e231abe7d7e650df..5e6c92c2bacf5093d5dad19b4c3a32df698bf6f9 100644 (file)
@@ -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);
 
index 80f004dd64ac3d0a48151c276b199777f5983a4c..7445b2c1127ef49747cd286321e3e2162a09226e 100644 (file)
@@ -1,5 +1,8 @@
 2002-10-16  Mark Mitchell  <mark@codesourcery.com>
 
+       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 (file)
index 0000000..3f133d4
--- /dev/null
@@ -0,0 +1,3 @@
+class a {} a1;
+template <a & p> class b { public: b() { static_cast <a &> (p); }; };
+int main() { b <a1> b1; };