compiler hang in ORDER-UVL-SETS
Bug #308914 reported by
Nikodemus Siivola
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
Low
|
Unassigned |
Bug Description
BUGS #429
Compiling a file with this contents makes the compiler loop in ORDER-UVL-SETS:
(declaim (inline storage))
(defun storage (x)
(the (simple-array flt (*)) (unknown x)))
(defun test1 (lumps &key cg)
(let ((nodes (map 'list (lambda (lump) (storage lump))
(setf (aref nodes 0) 2)
(assert (every #'~= (apply #'concatenate 'list nodes) '(2 3 6 9)))))
Changed in sbcl: | |
status: | New → Confirmed |
Changed in sbcl: | |
importance: | Undecided → Medium |
Changed in sbcl: | |
assignee: | Nikodemus Siivola (nikodemus) → nobody |
Changed in sbcl: | |
status: | Confirmed → Fix Released |
To post a comment you must log in.
This is due to stack analysis being foiled by the unreachable code left in by control flow analysis, which in turn happens thanks to unconditional marking of NLX's as live in CONTROL- ANALYZE- 1-FUN.
It seems to me that the correct fix would be to split CONTROL-ANALYZE into two stages: 1: walk the graph, marking nodes as live without giving NLX's special treatment. 2: walk the live parts of the graph in emit order, doing the emit order stuff.