defstruct :predicate failure

Peter Keller psilord at cs.wisc.edu
Wed May 9 05:09:34 UTC 2018


On 05/08/2018 11:03 PM, Andrew Kirkpatrick wrote:
> Interestingly I cannot reproduce it. I'm running Linux Mint 18.2 and
> built ECL from a git checkout of the tag ECL-16.1.3:
> 
> $ /opt/ecl/bin/ecl
> ;;; Loading "/home/spacebat/quicklisp/setup.lisp"
> ;;; Loading #P"/opt/ecl/lib/ecl-16.1.3/asdf.fas"
> ECL (Embeddable Common-Lisp) 16.1.3
> (git:17645d703eb95b9452186015f5f3a1a9c0bc6b6a)
> Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
> Copyright (C) 1993 Giuseppe Attardi
> Copyright (C) 2000 Juan J. Garcia-Ripoll
> Copyright (C) 2016 Daniel Kochmanski
> ECL is free software, and you are welcome to redistribute it
> under certain conditions; see file 'Copyright' for details.
> Type :h for Help.
> Top level in: #<process TOP-LEVEL>.
>> (defstruct (foo (:type vector) (:predicate nil)) qux bar)
> FOO
> 
>> (make-foo :qux "q" :bar "b")
> #("q" "b")
> 
> 
> However if I install ECL via apt, I get an older version with this banner:
> 
> ECL (Embeddable Common-Lisp) 15.3.7 (git:UNKNOWN)
> 
> The error you describe is then evident.

I suspect the tagged version and the actual release are different, but
it seems it is moot.

I was not the only person to discover this bug:

https://gitlab.com/embeddable-common-lisp/ecl/issues/385

It turns out it is fixed on the head of ecl (and maybe by the time that
tag was actually made, too).

When I switched to the head of ECL, the described problem went away.

Sadly, another problem showed up, this time trying to load fare-utils
from the most recent edition of Quicklisp.


Linux violet > ecl
;;; Loading "/home/psilord/quicklisp/setup.lisp"
;;; Loading #P"/usr/local/lib/ecl-16.1.3/asdf.fas"
ECL (Embeddable Common-Lisp) 16.1.3 (git:e3b9919ffaddbeb8d5f16c394fb70b813c5f0d94)
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
Copyright (C) 2016 Daniel Kochmanski
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help.
Top level in: #<process TOP-LEVEL 0x2314f80>.
> (ql:quickload :fare-utils)
To load "fare-utils":
  Load 1 ASDF system:
    fare-utils
; Loading "fare-utils"
;;;
;;; Compiling
/home/psilord/quicklisp/dists/quicklisp/software/fare-utils-20170124-git/base/utils.lisp.
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
;;;
.
;;; Error:
;;;   in file utils.lisp, position 4443
;;;   at (EXPORTING-DEFINITIONS (DEFMACRO DEFINE-EXPORTER ...) ...)
;;;   * The macro form (EXPORTING-DEFINITIONS (DEFMACRO DEFINE-EXPORTER
(EXPORTER DEFINER) `(DEFMACRO ,EXPORTER (SYMBOL &REST ARGS) `(PROGN (,',DEFINER
,SYMBOL , at ARGS) (ENSURE-SYMBOL-EXPORTED ,SYMBOL)))) (DEFINE-EXPORTER
DEFINE*-EXPORTER DEFINE-EXPORTER) (DEFINE-EXPORTER DEF*CLASS DEFCLASS)
(DEFINE-EXPORTER DEF*CONSTANT DEFCONSTANT) (DEFINE-EXPORTER DEF*GENERIC
DEFGENERIC) (DEFINE-EXPORTER DEFINE*-COMPILER-MACRO DEFINE-COMPILER-MACRO)
(DEFINE-EXPORTER DEFINE*-CONDITION DEFINE-CONDITION) (DEFINE-EXPORTER
DEFINE*-METHOD-COMBINATION DEFINE-METHOD-COMBINATION) (DEFINE-EXPORTER
DEFINE*-MODIFY-MACRO DEFINE-MODIFY-MACRO) (DEFINE-EXPORTER
DEFINE*-SETF-EXPANDER DEFINE-SETF-EXPANDER) (DEFINE-EXPORTER
DEFINE*-SYMBOL-MACRO DEFINE-SYMBOL-MACRO) (DEFINE-EXPORTER DEF*MACRO DEFMACRO)
(DEFINE-EXPORTER DEF*METHOD DEFMETHOD) (DEFINE-EXPORTER DEF*PACKAGE DEFPACKAGE)
(DEFINE-EXPORTER DEF*PARAMETER DEFPARAMETER) (DEFINE-EXPORTER DEF*SETF DEFSETF)
(DEFINE-EXPORTER DEF*STRUCT DEFSTRUCT) (DEFINE-EXPORTER DEF*TYPE DEFTYPE)
(DEFINE-EXPORTER DEF*FUN DEFUN) (DEFINE-EXPORTER DEF*VAR DEFVAR)) was not
expanded successfully.
;;; Error detected:
;;; GO: The tagbody 2875 is missing.
Condition of type: COMPILE-FILE-ERROR
COMPILE-FILE-ERROR while compiling #<cl-source-file "fare-utils" "base" "utils">

Available restarts:

1. (RETRY) Retry compiling #<cl-source-file "fare-utils" "base" "utils">.
2. (ACCEPT) Continue, treating compiling #<cl-source-file "fare-utils" "base"
"utils"> as having been successful.
3. (RETRY) Retry ASDF operation.
4. (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the
configuration.
5. (ABORT) Give up on "fare-utils"
6. (RESTART-TOPLEVEL) Go back to Top-Level REPL.

Broken at SI:BYTECODES. [Evaluation of: (QUICKLISP-CLIENT:QUICKLOAD
:FARE-UTILS)] In: #<process TOP-LEVEL 0x2314f80>.




I appreciate you had spent some time looking into the :predicate bug.

Thank you!

-pete




More information about the ecl-devel mailing list