]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-type-escape fix for ada
authorolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Mar 2007 12:47:53 +0000 (12:47 +0000)
committerolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Mar 2007 12:47:53 +0000 (12:47 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123022 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa-type-escape.c

index 68d32e3b61a367cabd9dab862d5c7c0fdd4665e3..a6beced80114b7a39062dbcaebe5e8e27bd395d4 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-17  Olga Golovanevsky  <olga@il.ibm.com>
+  
+       * ipa-type-escape.c (look_for_casts) : Revert code to use
+       handled_component_p due to ada test a-numaux.adb.
+
 2007-03-17  Kazu Hirata  <kazu@codesourcery.com>
 
        * final.c (final_scan_insn): Alter the condition of a
index d4c86ca06b2cdf3ef2721a990383ed20d3030f48..921284db667538872c83b4c83a1ec013e58b43d1 100644 (file)
@@ -1239,26 +1239,21 @@ look_for_casts (tree lhs ATTRIBUTE_UNUSED, tree t)
       tree castfromvar = TREE_OPERAND (t, 0);
       cast = cast | check_cast (TREE_TYPE (t), castfromvar);
     }
-  else if (TREE_CODE (t) == COMPONENT_REF
-          || TREE_CODE (t) == INDIRECT_REF
-          || TREE_CODE (t) == BIT_FIELD_REF)
-    {
-      tree base = get_base_address (t);
-      while (t != base)
-       {
-         t = TREE_OPERAND (t, 0);
-         if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
-           {
-             /* This may be some part of a component ref.
-                IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
-                castfromref will give you a.b.c, not a. */
-             tree castfromref = TREE_OPERAND (t, 0);
-             cast = cast | check_cast (TREE_TYPE (t), castfromref);
-           }
-         else if (TREE_CODE (t) == COMPONENT_REF)
-           get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
-       }
-    } 
+  else 
+    while (handled_component_p (t))
+      {
+       t = TREE_OPERAND (t, 0);
+       if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
+         {
+           /* This may be some part of a component ref.
+              IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
+              castfromref will give you a.b.c, not a. */
+           tree castfromref = TREE_OPERAND (t, 0);
+           cast = cast | check_cast (TREE_TYPE (t), castfromref);
+         }
+       else if (TREE_CODE (t) == COMPONENT_REF)
+         get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
+      }
 
   if (!cast)
     cast = CT_NO_CAST;