mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-22 04:21:16 -08:00
Signal error on invalid constant type checking.
Side effet was SIGSEGV on compiled code.
This commit is contained in:
parent
bfc58c219e
commit
6dc40c869c
2 changed files with 27 additions and 4 deletions
|
|
@ -101,10 +101,17 @@
|
|||
(c1checked-value (list (values-type-primary-type type)
|
||||
value)))
|
||||
((and (policy-evaluate-forms) (constantp value *cmp-env*))
|
||||
(unless (typep (ext:constant-form-value value *cmp-env*) type)
|
||||
(cmpwarn "Failed type assertion for value ~A and type ~A"
|
||||
value type))
|
||||
value)
|
||||
(if (typep (ext:constant-form-value value *cmp-env*) type)
|
||||
value
|
||||
(progn
|
||||
;; warn and generate error.
|
||||
(cmpwarn "Failed type assertion for value ~A and type ~A"
|
||||
value type)
|
||||
(c1expr `(error 'simple-type-error
|
||||
:datum ,value
|
||||
:expected-type ',type
|
||||
:format-control "The constant value ~S is not a ~S"
|
||||
:format-arguments (list ,value ',type))))))
|
||||
;; Is the form type contained in the test?
|
||||
((progn
|
||||
(setf form (c1expr value)
|
||||
|
|
|
|||
|
|
@ -1182,3 +1182,19 @@
|
|||
(is-eql 10 (f2 10))
|
||||
(compile 'f2)
|
||||
(is-eql 10 (f2 10))))
|
||||
|
||||
;;; Date 2017-06-27
|
||||
;;; Reported by Fabrizio Fabbri
|
||||
;;; Description
|
||||
;;;
|
||||
;;; Compiled function drop argument type checkin
|
||||
;;; on constant.
|
||||
;;;
|
||||
;;; Bug https://gitlab.com/embeddable-common-lisp/ecl/issues/353
|
||||
(test cmp.0053.check-values-type-on-constant
|
||||
(handler-case
|
||||
(funcall (compile nil
|
||||
'(lambda () (rplaca 'A 1))))
|
||||
(simple-type-error () t)
|
||||
(error () nil)
|
||||
(:no-error (v) (declare (ignore v)) nil)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue