Completed
Details
Assignee
UnassignedUnassignedReporter
Nicola MomettoNicola MomettoApproval
OkPatch
CodePriority
CriticalFix versions
Details
Details
Assignee
Unassigned
UnassignedReporter
Nicola Mometto
Nicola MomettoApproval
Ok
Patch
Code
Priority
Fix versions
Created June 3, 2015 at 4:16 PM
Updated August 19, 2016 at 5:34 PM
Resolved August 19, 2016 at 5:34 PM
Clojure currently doesn't clear unused locals. This is problematic as some form of destructuring can generate unused/unusable locals that the compiler cannot clear and thus can cause head retention:
Here's a macroexpansion that exposes this issue:
Cause: The first two bindings of a and b will hold onto the head of c since they are never used and not accessible from the loop body they cannot be cleared.
Approach: Track whether local bindings are used. After evaluating the binding expression, if the local binding is not used and can be cleared, then pop the result rather than storing it.
Patch: 0001-CLJ-1744-clear-unused-locals-v2.patch
Screened by: Alex Miller