[llvm-commits] Fix PR1224 differently

Chris Lattner clattner at apple.com
Tue Jun 12 22:33:32 PDT 2007


Looks fine to me, please apply,

-Chris

On Jun 9, 2007, at 7:21 AM, Duncan Sands wrote:

> The fix that was applied for PR1224 stops the compiler
> crashing but breaks exception handling.  The problem
> described in PR1224 is that invoke is a terminator that
> can produce a value.  The value may be needed in other
> blocks.  The code that writes to registers values needed
> in other blocks runs before terminators are lowered (in
> this case invoke) so asserted because the value was not
> yet available.  The fix that was applied was to do invoke
> lowering earlier, before writing values to registers.
>
> The problem this causes is that the code to copy values
> to registers can be output after the invoke call.  If
> an exception is raised and control is passed to the
> landing pad then this copy-code will never execute.  If
> the value is needed in some code path reached via the
> landing pad then that code will get something bogus.
>
> The attached patch reverts the original fix and simply
> skips invoke values in the general copying to registers
> code.  The invoke value is instead copied to a register
> in the invoke lowering code.  I had a testcase but I
> accidentally deleted it...
>
> Ciao,
>
> Duncan.
> <invoke_order.diff>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list