Raymond Toy pushed to branch master at cmucl / cmucl

Commits:

3 changed files:

Changes:

  • src/compiler/generic/objdef.lisp
    ... ... @@ -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))
    

  • src/general-info/release-21d.md
    ... ... @@ -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:
    

  • tests/issues.lisp
    ... ... @@ -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"))))))