Here's a fragment of the SSA dump for a shortened version of that test.
D.860_8 = __gnat_malloc (20); # D.861_10 = V_MUST_DEF <D.861_9>; D.861 = (struct c34007p__designated *) D.860_8; # VUSE <D.861_10>; VIEW_CONVERT_EXPR<struct c34007p__T7b>(*D.861).b = 1; # VUSE <D.861_10>; VIEW_CONVERT_EXPR<struct c34007p__T7b>(*D.861).l = 3; There last two statements are confusing to me. First of all, why isn't the *D.861 in SSA form? But more importantly, those statements are modifying memory, but there's no V_MAY_DEF operand. Why not? I'm stepping through update_ssa_operands but can't figure out exactly where it's supposed to be written here.