https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82042
--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 11 Sep 2017, marxin at gcc dot gnu.org wrote: > 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? Yeah, this is a know deficiency in ao_ref 'offset' (and also size and maxsize). Blowing up to offset_int isn't really a good idea. size and max_size have -1 as "unknown" but offset doesn't really have such value and "failing" isn't an option for the alias machinery. I've long thought about making ao_ref byte precision but that loses bit-level disambiguation we get into with bitfield stores/loads so I "postponed" that to until we (finally) get bitfield load/store lowering... The issue is long-standing so I think we can just leave it that way...