Merge branch 'develop' into 'develop'

Signal error on invalid constant type checking.

See merge request !75
This commit is contained in:
Daniel Kochmański 2017-06-29 08:41:50 +00:00
commit 307345764d
2 changed files with 27 additions and 4 deletions

View file

@ -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)

View file

@ -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)))