From 0004f992f087081cab0f22574347d2d97ea698c1 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Tue, 19 Apr 2011 18:19:13 +0200 Subject: [PATCH] ipa-prop.c (stmt_may_be_vtbl_ptr_store): Return false for scalar non-pointer assignments. 2011-04-19 Martin Jambor * ipa-prop.c (stmt_may_be_vtbl_ptr_store): Return false for scalar non-pointer assignments. From-SVN: r172717 --- gcc/ChangeLog | 5 +++++ gcc/ipa-prop.c | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7ada452d6ef..785980d91d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-04-19 Martin Jambor + + * ipa-prop.c (stmt_may_be_vtbl_ptr_store): Return false for scalar + non-pointer assignments. + 2011-04-19 Martin Jambor * ipa-cp.c (ipcp_process_devirtualization_opportunities): Take into diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index c482165a6f3..6620d5791cd 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -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; } -- 2.30.2