------- Additional Comments From rguenth at gcc dot gnu dot org 2005-08-11 10:44 ------- We inline all and get
void bar() () { char & D.1777; struct B * D.1776; char & D.1773; union C D.1772; <bb 0>: D.1772.p = &a; D.1776_5 = D.1772.q; D.1777_6 = &D.1776_5->d; D.1773_7 = D.1777_6; *D.1773_7 = 0; return; } where we access the padding between c and i in struct A through an object of type B. This must be invalid code. Even if it is, the gcc_unreachable () is probably not a good idea - Danny, how should we deal with this? Ignore references to padding and just return NULL from first_vi_for_offset? There's a similar problem in get_constraint_for_component_ref which I hit with array-aliasing and work-around by *************** get_constraint_for_component_ref (tree t *** 2075,2082 **** } /* assert that we found *some* field there. The user couldn't be accessing *only* padding. */ ! ! gcc_assert (curr); } else if (dump_file && (dump_flags & TDF_DETAILS)) --- 2076,2084 ---- } /* assert that we found *some* field there. The user couldn't be accessing *only* padding. */ ! /* Still the user could access one past the end of an array ! embedded in a struct resulting in accessing *only* padding. */ ! /* gcc_assert (curr); */ } else if (dump_file && (dump_flags & TDF_DETAILS)) -- What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22615