Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
-
e9a598e5
by Raymond Toy at 2018-02-19T08:41:07-08:00
-
ac4b9fc8
by Raymond Toy at 2018-02-19T16:50:47+00:00
3 changed files:
Changes:
... | ... | @@ -252,29 +252,32 @@ |
252 | 252 |
:ref-known (flushable foldable)
|
253 | 253 |
:set-trans (setf %array-fill-pointer)
|
254 | 254 |
:set-known (unsafe))
|
255 |
+ ;; Don't let these ref-trans to be constant-folded because these
|
|
256 |
+ ;; might get called on arrays that don't have these slots. (Because
|
|
257 |
+ ;; the lisp functions might be inlined.)
|
|
255 | 258 |
(fill-pointer-p :type (member t nil)
|
256 | 259 |
:ref-trans %array-fill-pointer-p
|
257 |
- :ref-known (flushable foldable)
|
|
260 |
+ :ref-known (flushable)
|
|
258 | 261 |
:set-trans (setf %array-fill-pointer-p)
|
259 | 262 |
:set-known (unsafe))
|
260 | 263 |
(elements :type index
|
261 | 264 |
:ref-trans %array-available-elements
|
262 |
- :ref-known (flushable foldable)
|
|
265 |
+ :ref-known (flushable)
|
|
263 | 266 |
:set-trans (setf %array-available-elements)
|
264 | 267 |
:set-known (unsafe))
|
265 | 268 |
(data :type array
|
266 | 269 |
:ref-trans %array-data-vector
|
267 |
- :ref-known (flushable foldable)
|
|
270 |
+ :ref-known (flushable)
|
|
268 | 271 |
:set-trans (setf %array-data-vector)
|
269 | 272 |
:set-known (unsafe))
|
270 | 273 |
(displacement :type (or index null)
|
271 | 274 |
:ref-trans %array-displacement
|
272 |
- :ref-known (flushable foldable)
|
|
275 |
+ :ref-known (flushable)
|
|
273 | 276 |
:set-trans (setf %array-displacement)
|
274 | 277 |
:set-known (unsafe))
|
275 | 278 |
(displaced-p :type (member t nil)
|
276 | 279 |
:ref-trans %array-displaced-p
|
277 |
- :ref-known (flushable foldable)
|
|
280 |
+ :ref-known (flushable)
|
|
278 | 281 |
:set-trans (setf %array-displaced-p)
|
279 | 282 |
:set-known (unsafe))
|
280 | 283 |
(dimensions :rest-p t))
|
... | ... | @@ -35,6 +35,8 @@ public domain. |
35 | 35 |
* ~~#59~~ Incorrect type-derivation for `decode-float`
|
36 | 36 |
* ~~#60~~ The function `C::%UNARY-FROUND` is undefined
|
37 | 37 |
* ~~#58~~ Bogus type error in comparison of complex number with `THE` form
|
38 |
+ * ~~#61~~ Segfault when compiling call to `ARRAY-HAS-FILL-POINTER-P` on bit vector constant
|
|
39 |
+ * ~~#62~~ Segfault when compiling `ARRAY-DISPLACEMENT` on a string constant
|
|
38 | 40 |
* Other changes:
|
39 | 41 |
* Improvements to the PCL implementation of CLOS:
|
40 | 42 |
* Changes to building procedure:
|
... | ... | @@ -521,3 +521,17 @@ |
521 | 521 |
(let ((c9 (compile nil #'(lambda (x)
|
522 | 522 |
(= (the (eql 1.0d0) x) #c(1/2 1/2))))))
|
523 | 523 |
(assert-false (funcall c9 1.d0))))
|
524 |
+ |
|
525 |
+(define-test issue.61
|
|
526 |
+ (:tag :issues)
|
|
527 |
+ ;; Verifies that the compiler doesn't segfault and that we return
|
|
528 |
+ ;; the correct value.
|
|
529 |
+ (assert-false
|
|
530 |
+ (funcall (compile nil '(lambda () (array-has-fill-pointer-p #*10))))))
|
|
531 |
+ |
|
532 |
+(define-test issue.62
|
|
533 |
+ (:tag :issues)
|
|
534 |
+ ;; Verifies that the compiler doesn't segfault and that we return
|
|
535 |
+ ;; the correct value.
|
|
536 |
+ (assert-false
|
|
537 |
+ (funcall (compile nil '(lambda () (array-displacement "aaaaaaaa"))))))
|