https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71460
--- Comment #24 from rguenther at suse dot de <rguenther at suse dot de> --- On Fri, 10 Jun 2016, ubizjak at gmail dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71460 > > --- Comment #21 from Uroš Bizjak <ubizjak at gmail dot com> --- > (In reply to Uroš Bizjak from comment #19) > > Following test doesn't compile with patched compiler: > > BTW: This is preexisting problem, on 64bit target we can trigger the issue > with > transparent unions with: > > --cut here-- > union U { __int128 x; long double y; } __attribute__ ((transparent_union)); > > void foo (union U); > > void test (void) > { > union U t; > > foo (1.0L); > > foo ( (__int128) 1); > } > --cut here-- > > -O2: > > union.c:1:7: warning: union cannot be made transparent > union U { __int128 x; long double y; } __attribute__ ((transparent_union)); But __int128 and long double are not passed the same way (rdi/rsi vs. on the stack).