You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 7018 Reporter:@alainfrisch Assigned to:@alainfrisch Status: closed (set by @xavierleroy on 2017-02-16T14:14:53Z) Resolution: fixed Priority: normal Severity: minor Category: back end (clambda to assembly) Monitored by:@diml@jmeber@hcarty
Bug description
The function 'substitute' in closure.ml is responsible for applying alpha renaming to avoid clash of ids. While all other binding forms rename their bound identifiers, this is not the case for Ucatch. I attach a patch that fixes that.
we have observed on a large code base a weird segfault caused by the addition of an unused type in a compilation unit. The segfault is very fragile, and appear/disappear if other useless types are added. Our only explanation is that the problem is related to clashes of unique ids related to inlining, as adding/removing those useless types only affects the unique id generator (the generated assembly code is unchanged modulo changes of these unique ids). The patch seems to fix the problem, although it's hard to be positive that it doesn't just move it around.
That's clearly an oversight in Closure.substitute. I'm not sure the patch is right, though. In "Ucatch(nfail, ids, body, handler)", isn't it the case that "ids" scope over "handler" but not over "body"? In which case the first recursive call to "substitute" should be with the original substitution "sb", and the second with the extended substitution "sb'".
Thanks Xavier. You're right, of course. I'll commit the patch modified as you suggest. (Strictly speaking, I think the attached patch was still safe, since the identifiers ids cannot be referenced or bound in body -- except if there is another bug elsewhere.)
Original bug ID: 7018
Reporter: @alainfrisch
Assigned to: @alainfrisch
Status: closed (set by @xavierleroy on 2017-02-16T14:14:53Z)
Resolution: fixed
Priority: normal
Severity: minor
Category: back end (clambda to assembly)
Monitored by: @diml @jmeber @hcarty
Bug description
The function 'substitute' in closure.ml is responsible for applying alpha renaming to avoid clash of ids. While all other binding forms rename their bound identifiers, this is not the case for Ucatch. I attach a patch that fixes that.
we have observed on a large code base a weird segfault caused by the addition of an unused type in a compilation unit. The segfault is very fragile, and appear/disappear if other useless types are added. Our only explanation is that the problem is related to clashes of unique ids related to inlining, as adding/removing those useless types only affects the unique id generator (the generated assembly code is unchanged modulo changes of these unique ids). The patch seems to fix the problem, although it's hard to be positive that it doesn't just move it around.
File attachments
The text was updated successfully, but these errors were encountered: