This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[resend] - Probable buglet in ipa-prop.c


mailer added html again...
----------------------------------------

When trying some of my updated prototype changes on trunk, the code
tripped over this segment in ipa-prop.c :

       lhs = gimple_assign_lhs (stmt);
       rhs = gimple_assign_rhs1 (stmt);
       if (!is_gimple_reg_type (rhs)
           || TREE_CODE (lhs) == BIT_FIELD_REF
           || contains_bitfld_component_ref_p (lhs))
         break;

I had converted "gimple_reg_type(tree)" to instead be "gimple_reg_type
(gimple_type)",  and during bootstrap it conked out because it received
an SSA_NAME instead of a type.

static inline bool
is_gimple_reg_type (tree type)
{
  return !AGGREGATE_TYPE_P (type);
}


It never triggered before because  AGGREGATE_TYPE_P(TYPE) just checks
the tree codes, and doesn't do a TYPE_CHECK()

#define AGGREGATE_TYPE_P(TYPE) \
  (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE))


I think it should probably be passing TREE_TYPE (rhs) liek so  ?

Andrew


Index: ipa-prop.c
===================================================================
*** ipa-prop.c	(revision 205351)
--- ipa-prop.c	(working copy)
*************** determine_known_aggregate_parts (gimple
*** 1424,1430 ****
  
        lhs = gimple_assign_lhs (stmt);
        rhs = gimple_assign_rhs1 (stmt);
!       if (!is_gimple_reg_type (rhs)
  	  || TREE_CODE (lhs) == BIT_FIELD_REF
  	  || contains_bitfld_component_ref_p (lhs))
  	break;
--- 1424,1430 ----
  
        lhs = gimple_assign_lhs (stmt);
        rhs = gimple_assign_rhs1 (stmt);
!       if (!is_gimple_reg_type (TREE_TYPE (rhs))
  	  || TREE_CODE (lhs) == BIT_FIELD_REF
  	  || contains_bitfld_component_ref_p (lhs))
  	break;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]