(I don't think this is the same as any of the similar bugs, although I could be wrong.) In this case the field assignments cover all of u, so none of it is actually live across the call, but dataflow can't figure this out.
While this bogus warning is the only visible effect I know of, fixing this would also decrease register pressure and might result in improved code quality in some cases. struct ss { unsigned short a; unsigned short b; }; union uu { unsigned int all; struct ss parts; }; #include <setjmp.h> extern void bar(union uu); extern void baz(); void foo() { for(;;) { union uu u; jmp_buf env; u.parts.a = 0; u.parts.b = 0; bar(u); if (setjmp(env)==0) baz(); else baz(); } } -- Summary: Another bogus 'clobbered by longjmp' message Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dalej at gcc dot gnu dot org GCC build triplet: powerpc-apple-darwin8.0.0 GCC host triplet: powerpc-apple-darwin8.0.0 GCC target triplet: powerpc-apple-darwin8.0.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25399