On Fri, Nov 13, 2020 at 09:41:28AM +0100, Richard Biener via Gcc-patches wrote: > On Thu, Mar 12, 2020 at 1:41 AM J.W. Jagersma via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > The following patch extends the generation of exception handling > > information, so that it is possible to catch exceptions thrown from > > volatile asm statements, when -fnon-call-exceptions is enabled. Parts > > of the gcc code already suggested this should be possible, but it was > > never fully implemented.
> As you say volatile asms are already considered throwing in some pieces of > code so this is a step towards fulfilling that promise. But that is just wrong. Volatile is an orthogonal concept. There is nothing wrong with having a non-volatile throwing asm, either, and it can optimise better. Can you just add some markup for throwing asm? LLVM implements "asm goto" with outputs as a throwing insn, instead of as a jump insn (as it should be, as it is documented!) I suggested doing an "asm break" (or whatever name, this is just a vaguely related already existing keyword) for this, instead. This has exactly the semantics you want: all outputs are written on the normal path, and they are either or not written when it throws. The difference with your situation is in that case you specify all labels the code could jump to, and in your case you don't. Maybe just one less colon could make the distinction? (asm goto has four colons, other asm has at most three). Segher