------- Comment #7 from jason at gcc dot gnu dot org 2008-03-29 15:19 ------- The bug is that the temporary object created by the C99 compound literal syntax doesn't have proper C++ temporary lifetime; the compiler treats it as living until the end of the block, so the goto seems to be skipping its initialization. The compiler talks about a catch block because it assumes that the only artificial decl a goto could jump into is the one for the catch parameter.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35708