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?