[LLVMdev] LLVMdev Digest, Vol 85, Issue 50

John McCall rjmccall at apple.com
Thu Jul 28 13:00:26 PDT 2011

On Jul 28, 2011, at 8:41 AM, Peter Lawrence wrote:
> In short the problem is that there is an ambiguity between a cleanup handler having
> an Action Table entry that looks like
> 	.byte	1		;; Type = 1 (ie #1 entry in Types Table)
> 	.byte	0		;; Next = 0 (ie none, ie this is the list terminator for this try-statement)
> together with a corresponding Types Table entry #1 that looks like
> 	.long	0		;; RTTI pointer == NULL

This is not a cleanup.  In the LSDAs for GCC's family of personalities, cleanups
by definition have a zero index into the types table.  I think I see your confusion,

LLVM-GCC and Clang used to share a bug where cleanups would sometimes
be emitted as catch-alls as a workaround to a flaw in the inliner.  I fixed this
flaw (or to be specific, I worked around it to the best of my ability given the
constraints of the broken eh.exception/eh.selector representation) sometime
in June, but part of the fix requires the front-end to emit different code, and I've
only updated Clang to do so because I can't touch dragonegg and LLVM-GCC
is dead.

AFAIK, GCC never had this bug.


More information about the llvm-dev mailing list