OSDN Git Service

2011-04-19 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2011 16:19:13 +0000 (16:19 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2011 16:19:13 +0000 (16:19 +0000)
* ipa-prop.c (stmt_may_be_vtbl_ptr_store): Return false for scalar
non-pointer assignments.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172717 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa-prop.c

index 7ada452..785980d 100644 (file)
@@ -1,5 +1,10 @@
 2011-04-19  Martin Jambor  <mjambor@suse.cz>
 
+       * ipa-prop.c (stmt_may_be_vtbl_ptr_store): Return false for scalar
+       non-pointer assignments.
+
+2011-04-19  Martin Jambor  <mjambor@suse.cz>
+
        * ipa-cp.c (ipcp_process_devirtualization_opportunities): Take into
        account anc_offset and otr_type from the indirect edge info.
        * ipa-prop.c (get_ancestor_addr_info): New function.
index c482165..6620d57 100644 (file)
@@ -405,13 +405,19 @@ stmt_may_be_vtbl_ptr_store (gimple stmt)
     {
       tree lhs = gimple_assign_lhs (stmt);
 
-      if (TREE_CODE (lhs) == COMPONENT_REF
-         && !DECL_VIRTUAL_P (TREE_OPERAND (lhs, 1))
-         && !AGGREGATE_TYPE_P (TREE_TYPE (lhs)))
+      if (!AGGREGATE_TYPE_P (TREE_TYPE (lhs)))
+       {
+         if (flag_strict_aliasing
+             && !POINTER_TYPE_P (TREE_TYPE (lhs)))
+           return false;
+
+         if (TREE_CODE (lhs) == COMPONENT_REF
+             && !DECL_VIRTUAL_P (TREE_OPERAND (lhs, 1)))
            return false;
-      /* In the future we might want to use get_base_ref_and_offset to find
-        if there is a field corresponding to the offset and if so, proceed
-        almost like if it was a component ref.  */
+         /* In the future we might want to use get_base_ref_and_offset to find
+            if there is a field corresponding to the offset and if so, proceed
+            almost like if it was a component ref.  */
+       }
     }
   return true;
 }