http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46678
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-27 09:45:41 UTC --- > If one looks at the original dump, the only difference is nesting: > > the working version has: > > { > // setup .string and other initialization > } > [...] > } > > > the failing version uses: > > { > // setup .string and other initialization > [...] > } > } I got that swapped around. Correct is: In working version the .string is set in a block which stretches the whole function / try_block while in the failing version it is in a separate block. That indicates an extra/too early finish_block() rather than one too much. While it makes a bit more sense, I admittedly still fail to understand why int .string { .string = 4 } // use .string fails whereas the following works: int .string { .string = 4 // use .string }