------- Comment #10 from jakub at gcc dot gnu dot org 2009-05-13 08:19 ------- Of course there is a very important reason. If you allow inline asms to change control flow, even just to labels whose address has been taken through &&label, you penalize a lot of code which doesn't change the control flow, as the compiler will have to assume each inline asm which could possibly get at an label address (not just directly, but through global variables, pointers etc.) can jump to it. That's an awful lot of extra flow graph edges and optimization limitations. Unless you'd invent some new syntax to say if an inline asm can change control flow and by default assume it can't.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40124