Skip to content
  • Duncan Sands's avatar
    The semantics of invoke require that we always jump to the unwind block · f708f73a
    Duncan Sands authored
    (landing pad) when an exception unwinds through the call.  This doesn't
    quite match the way the dwarf unwinder works: by default it only jumps to
    the landing pad if the catch or filter specification matches, and otherwise
    it keeps on unwinding.  There are two ways of specifying to the unwinder
    that it should "always" (more on why there are quotes here later) jump to
    the landing pad: follow the specification by a 0 typeid, or follow it by
    the typeid for the NULL typeinfo.  GCC does the first, and this patch makes
    LLVM do the same as gcc.  However there is a problem: the unwinder performs
    optimizations based on C++ semantics (it only expects destructors to be
    run if the 0 typeid fires - known as "cleanups"), meaning it assumes that no
    exceptions will be raised and that the raised exception will be reraised
    at the end of the cleanup code.  So if someone writes their own LLVM code
    using the exception intrinsics they will get a nasty surprise if they don't
    follow these rules.  The other possibility of using the typeid corresponding
    to NULL (catch-all) causes the unwinder to make no assumptions, so this is
    probably what we should use in the long-run.  However since we are still
    having trouble getting exception handling working properly, for the moment
    it seems best to closely imitate GCC.
    
    llvm-svn: 37399
    f708f73a
Loading