diff --git a/src/cmp/cmpbackend-cxx/cmpc-mach.lsp b/src/cmp/cmpbackend-cxx/cmpc-mach.lsp index b55ba45b2..5b6161940 100644 --- a/src/cmp/cmpbackend-cxx/cmpc-mach.lsp +++ b/src/cmp/cmpbackend-cxx/cmpc-mach.lsp @@ -114,11 +114,11 @@ (:double-sse-pack ext::double-sse-pack "__m128d" "ecl_make_double_sse_pack" "ecl_unbox_double_sse_pack" "ecl_unbox_double_sse_pack_unsafe") ;; intentional v (:int-sse-pack ext::sse-pack "__m128i" "ecl_make_int_sse_pack" "ecl_unbox_int_sse_pack" "ecl_unbox_int_sse_pack_unsafe") - (:object t "cl_object" nil nil nil) + (:object t "cl_object" "" "" "") (:bool t "bool" "ecl_make_bool" "ecl_to_bool" "ecl_to_bool") ;; These types are never selected to unbox data. ;; They are here, because we need to know how to print them. - (:void nil "void" nil nil nil) + (:void t "void" nil nil nil) (:pointer-void si::foreign-data "void*" "ecl_make_pointer" "ecl_to_pointer" "ecl_to_pointer") (:cstring string "char*" "ecl_cstring_to_base_string_or_nil" nil nil) (:char* string "char*" nil nil nil) diff --git a/src/cmp/cmpbackend-cxx/cmppass2-loc.lsp b/src/cmp/cmpbackend-cxx/cmppass2-loc.lsp index 7d49d4bc7..fed48f9d7 100644 --- a/src/cmp/cmpbackend-cxx/cmppass2-loc.lsp +++ b/src/cmp/cmpbackend-cxx/cmppass2-loc.lsp @@ -226,10 +226,11 @@ clfloat-value))) (wt (third loc)) ;; VV index (return-from wt-to-object-conversion)) - (let ((record (rep-type-record loc-rep-type))) - (unless record - (cmperr "Cannot coerce C variable of type ~A to lisp object" loc-rep-type)) - (wt (rep-type-to-lisp record) "(" loc ")"))) + (let* ((record (rep-type-record loc-rep-type)) + (coercer (and record (rep-type-to-lisp record)))) + (unless coercer + (cmperr "Cannot coerce C variable of type ~S to lisp object" loc-rep-type)) + (wt coercer "(" loc ")"))) (defun wt-from-object-conversion (dest-type loc-type rep-type loc) (let* ((record (rep-type-record rep-type))