https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82042
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-09-11
CC| |marxin at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Assignee|unassigned at gcc dot gnu.org |marxin at gcc dot
gnu.org
Ever confirmed|0 |1
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
Confirmed, I've got patch for 3/4 of ubsan errors.
The only one which is remaining is:
679 void
680 ao_ref_init_from_ptr_and_size (ao_ref *ref, tree ptr, tree size)
681 {
682 HOST_WIDE_INT t, size_hwi, extra_offset = 0;
683 ref->ref = NULL_TREE;
684 if (TREE_CODE (ptr) == SSA_NAME)
685 {
686 gimple *stmt = SSA_NAME_DEF_STMT (ptr);
687 if (gimple_assign_single_p (stmt)
688 && gimple_assign_rhs_code (stmt) == ADDR_EXPR)
689 ptr = gimple_assign_rhs1 (stmt);
690 else if (is_gimple_assign (stmt)
691 && gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR
692 && TREE_CODE (gimple_assign_rhs2 (stmt)) == INTEGER_CST)
693 {
694 ptr = gimple_assign_rhs1 (stmt);
695 extra_offset = BITS_PER_UNIT
696 * int_cst_value (gimple_assign_rhs2 (stmt));
697 }
698 }
699
700 if (TREE_CODE (ptr) == ADDR_EXPR)
701 {
702 ref->base = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0),
&t);
703 if (ref->base)
704 ref->offset = BITS_PER_UNIT * t;
705 else
Where offset should be probably offset_int type, which is not for free.
Or do we have a special value for such case Richi?