diff --git a/lib/hipe/llvm/hipe_llvm_main.erl b/lib/hipe/llvm/hipe_llvm_main.erl index 936e47aedb15..f068e34680d8 100644 --- a/lib/hipe/llvm/hipe_llvm_main.erl +++ b/lib/hipe/llvm/hipe_llvm_main.erl @@ -427,25 +427,21 @@ find_offsets([{Off,Arity}|Rest], Offsets, Acc) -> [I | RestOffsets] = lists:dropwhile(fun (Y) -> Y SDescs; fix_sdescs([{Offset, Arity} | Rest], SDescs) -> case lists:keyfind(Offset, 2, SDescs) of false -> fix_sdescs(Rest, SDescs); - {?SDESC, Offset, SDesc} -> - {ExnHandler, FrameSize, StkArity, Roots} = SDesc, + {?SDESC, Offset, {ExnHandler, FrameSize, StkArity, Roots}} -> FixedRoots = [X - Arity || X <- tuple_to_list(Roots)], - NewRoots = - case FixedRoots of - [H|_] when H >= 0 -> list_to_tuple(FixedRoots); - _ -> Roots - end, - NewSDesc = - {?SDESC, Offset, {ExnHandler, FrameSize - Arity, StkArity, NewRoots}}, + FixedSDesc = + {?SDESC, Offset, {ExnHandler, FrameSize - Arity, StkArity, FixedRoots}}, RestSDescs = lists:keydelete(Offset, 2, SDescs), - fix_sdescs(Rest, [NewSDesc | RestSDescs]) + fix_sdescs(Rest, [FixedSDesc | RestSDescs]) end.