diff options
author | Ian Price <ianprice90@googlemail.com> | 2013-10-23 11:14:26 +0100 |
---|---|---|
committer | Ian Price <ianprice90@googlemail.com> | 2014-01-07 03:37:21 +0000 |
commit | 265e7bd92a3d8720ca94d64443878d309250ecba (patch) | |
tree | b4cadc3302a094db02754494dc3c21ef68310ee0 /test-suite/tests/peval.test | |
parent | 70511cc4037c9129cf501d87c79d19f062d56357 (diff) | |
download | guile-265e7bd92a3d8720ca94d64443878d309250ecba.tar.gz |
Fix inlining of tail list to apply.
Fixes <http://bugs.gnu.org/15533>.
* module/language/tree-il/peval.scm (peval): Final list argument to
`apply' should not be inlined if it is mutable.
* test-suite/tests/peval.test ("partial evaluation"): Add test.
Diffstat (limited to 'test-suite/tests/peval.test')
-rw-r--r-- | test-suite/tests/peval.test | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/test-suite/tests/peval.test b/test-suite/tests/peval.test index 923b0d16a..5b003d26d 100644 --- a/test-suite/tests/peval.test +++ b/test-suite/tests/peval.test @@ -1223,4 +1223,18 @@ (call-with-prompt t (lambda () (abort-to-prompt t 1 2 3)) (lambda (k x y z) (list x y z)))) - (apply (primitive 'list) (const 1) (const 2) (const 3)))) + (apply (primitive 'list) (const 1) (const 2) (const 3))) + + (pass-if-peval resolve-primitives + ;; Should not inline tail list to apply if it is mutable. + ;; <http://debbugs.gnu.org/15533> + (let ((l '())) + (if (pair? arg) + (set! l arg)) + (apply f l)) + (let (l) (_) ((const ())) + (begin + (if (apply (primitive pair?) (toplevel arg)) + (set! (lexical l _) (toplevel arg)) + (void)) + (apply (primitive @apply) (toplevel f) (lexical l _)))))) |