------- Comment #5 from rguenth at gcc dot gnu dot org 2010-05-05 14:24 ------- Ah, we have
__builtin_va_start (&ap, 0); ap.1_1 = ap; D.2000_2 = ap.1_1 + -4; D.2001_3 = (long unsigned int) D.2000_2; D.2002_4 = D.2001_3 & -4; ap.2_5 = (void *) D.2002_4; From /* Copied from va-pa.h, but we probably don't need to align to word size, since we generate and preserve that invariant. */ u = size_int (size > 4 ? -8 : -4); t = fold_convert (sizetype, t); t = build2 (BIT_AND_EXPR, sizetype, t, u); t = fold_convert (valist_type, t); and the conversion to integer makes PTA drop out and consider ap.2_5 point to anything and thus we _do_ let stuff escape through it. In fact this causes everything to escape anywhere. Thus it's a missed optimization for targets doing this kind of re-alignment. But maybe it's not necessary anyway as the comment in pa.c suggests? -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43958