This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[resend] - Probable buglet in ipa-prop.c
- From: Andrew MacLeod <amacleod at redhat dot com>
- To: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jan Hubicka <hubicka at ucw dot cz>, Richard Biener <richard dot guenther at gmail dot com>
- Date: Wed, 27 Nov 2013 16:30:51 -0500
- Subject: [resend] - Probable buglet in ipa-prop.c
- Authentication-results: sourceware.org; auth=none
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;