Skip to content
  • Bill Wendling's avatar
    If we mark clean-ups as clean-ups, then it could break when inlining through an · d1aa77c3
    Bill Wendling authored
    'invoke' instruction. You will get a situation like this:
    
    bb:
      %ehptr = eh.exception()
      %sel = eh.selector(%ehptr, @per, 0);
    
    ...
    
    bb2:
      invoke _Unwind_Resume_or_Rethrow(%ehptr) %normal unwind to %lpad
    
    lpad:
      ...
    
    The unwinder will see the %sel call as a clean-up and, if it doesn't have a
    catch further up the call stack, it will skip running it. But there *is* another
    catch up the stack -- the catch for the %lpad. However, we can't see that. This
    is fixed in code-gen, where we detect this situation, and convert the "clean-up"
    selector call into a "catch-all" selector call. This gives us the correct
    semantics.
    
    llvm-svn: 99671
    d1aa77c3
Loading