/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ /* { dg-additional-options "-Wno-incompatible-pointer-types -Wno-analyzer-too-complex" } */ /* TODO: ideally we shouldn't have -Wno-analyzer-too-complex above; it appears to be needed due to the recursion. */ struct tz { int qc; }; struct wp { struct tz *p2; } *ov; struct dz { struct wp *r5; }; void za (void); void h5 (struct dz *); int e7 (struct wp *f2) { return f2 == ov; } void wr (struct wp *sw) { if (sw != 0) za (); } void m6 (const struct dz *gq) { wr (gq->r5); asm ("" : "+m" (gq)); if (0) { asm ("" : "+m" (gq->r5->p2->qc)); asm ("" : "+m" (gq->r5->p2->qc)); } asm ("" : "+m" (gq->r5->p2->qc)); if (e7 (gq->r5)) za (); } void ts (struct dz *cx) { struct dz nt; if (nt.r5) /* { dg-warning "use of uninitialized value 'nt.r5'" } */ { m6 (cx); h5 (cx); ts (&cx); } }