ASDF 3.0.2.x fails upgrade on CMUCL

Bug #1209272 reported by Robert P. Goldman
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
ASDF
Won't Fix
Low
Unassigned

Bug Description

On Mac OS X for me, it fails upgrade from 2.32 to the latest (3.0.2.2)
using method require.

Faré's testing instructions are:

/usr/local/bin/cmucl -noinit
then copy/paste:
(load"test/script-support.lisp") (asdf-test::da) (test-upgrade
'load-asdf-lisp'load-asdf-lisp-clean "REQUIRE")

I get an error as follows:

Error in function KERNEL:CLASS-TYPEP:
   Class is currently invalid: #<KERNEL::STANDARD-CLASS ASDF/SYSTEM:SYSTEM
                                 {48589A35}>

Revision history for this message
Robert P. Goldman (rpgoldman) wrote :

Faré adds:

There was a PCL problem in CMUCL preventing upgrade from ASDF2. I was
hoping that from ASDF3 to ASDF3, the lack of effective class
redefinition (all defclasses are to the thing as before) would avoid
the problem. Apparently not.

Raymond: an interesting thing to do would be to dig into old versions
of CMUCL to see if they used to support this kind of upgrade and we
can locate a PCL patch that broke it.

Revision history for this message
Faré (fahree) wrote :

I'd rather make it a bug against CMUCL than against ASDF.

That said, good luck wrapping defclass around something that makes it work on CMUCL, e.g. skipping the re-definition if the class was already defined identically.

Revision history for this message
Faré (fahree) wrote :
Download full text (4.6 KiB)

This is actually a CMUCL bug.

It is possible to "punt" more aggressively by introducing #+cmu before (< existing-version 2.27) in header.lisp, but this doesn't help. It looks like CMUCL somehow fails to properly finalize classes that are redefined in an eval-when, and/or the old objects end up not upgraded properly. Or something.

make u l=cmucl ASDF_UPGRADE_TEST_TAGS=2.27

Error in function KERNEL:CLASS-TYPEP:
   Class is currently invalid: #<KERNEL::STANDARD-CLASS ASDF/SYSTEM:SYSTEM
                                 {581E57F5}>

0: (SIGNAL #<SIMPLE-ERROR {599FDA15}>)
1: (ERROR "Class is currently invalid: ~S"
          #<KERNEL::STANDARD-CLASS ASDF/SYSTEM:SYSTEM {581E57F5}>)
2: (KERNEL:CLASS-TYPEP #<unavailable-arg> #<unavailable-arg> #<unavailable-arg>)
3: (ASDF/FIND-SYSTEM:LOCATE-SYSTEM "asdf")
4: ("LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. NAME .REST-ARG.)")
5: ("LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. NAME .REST-ARG.)" 0)[:EXTERNAL]
6: ((PCL:FAST-METHOD ASDF/SYSTEM:FIND-SYSTEM (STRING)) #<unused-arg>
    #<unused-arg> "asdf" (NIL))
7: ((PCL:FAST-METHOD ASDF/SYSTEM:FIND-SYSTEM (STRING)) 4 #<unused-arg>
    #<unused-arg> "asdf" ...)[:EXTERNAL]
8: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (STRING T))
    (#() . #(#)) #<unused-arg> "asdf" NIL)
9: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (STRING T)) 4
    (#() . #(#)) #<unused-arg> "asdf" ...)[:EXTERNAL]
10: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (SYMBOL T))
     #<unused-arg> #<unused-arg> :ASDF NIL)
11: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (SYMBOL T)) 4
     #<unused-arg> #<unused-arg> :ASDF ...)[:EXTERNAL]
12: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (SYMBOL T))
     #<unused-arg> #<unused-arg> NIL :ASDF)
13: ((PCL:FAST-METHOD ASDF/FIND-COMPONENT:FIND-COMPONENT (SYMBOL T)) 4
     #<unused-arg> #<unused-arg> NIL ...)[:EXTERNAL]
14: ((PCL:FAST-METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) #<unused-arg>
     #<unused-arg> ASDF/LISP-ACTION:LOAD-OP :ASDF ...)
15: ((PCL:FAST-METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) 5 #<unused-arg>
     #<unused-arg> ASDF/LISP-ACTION:LOAD-OP ...)[:EXTERNAL]
16: ("LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OPERATION COMPONENT .REST-ARG.)")
17: ("LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OPERATION COMPONENT .REST-ARG.)" 0)[:EXTERNAL]
18: (ASDF/CACHE:CALL-WITH-ASDF-CACHE
     #<Closure Over Function "LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OPERATION COMPONENT .REST-ARG.)"
       {59815861}>
     :OVERRIDE NIL)[:OPTIONAL]
19: (ASDF/FIND-SYSTEM::CALL-WITH-SYSTEM-DEFINITIONS
     #<Closure Over Function "LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OPERATION COMPONENT .REST-ARG.)"
       {59815861}>)
20: ((PCL:FAST-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<unused-arg>
     #S(PCL::FAST-METHOD-CALL
          :FUNCTION #<Closure Over Function "LAMBDA (.KEYARGS-START. .VALID-KEYS. G4744 G4745 G4746)"
                      {59815309}>
          :PV-CELL NIL
          :NEXT-METHOD-CALL NIL
          :ARG-INFO (2 . T))
     ASDF/LISP-ACTION:LOAD-OP :ASDF ...)
21: ((PCL:FAST-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) 5 #<unused-arg>
     #S(PCL::FAST-METHOD-CALL
          :FUNCTION #<Closu...

Read more...

Changed in asdf:
importance: Undecided → Low
milestone: none → version4
status: New → Confirmed
Revision history for this message
Faré (fahree) wrote :

Actually, some class is being *incompatibly* redefined between 2.32 and 2.33 (slot "renamed", i.e. removed and added), and this causes CMUCL to break badly, whereas other implementations behave sensibly.

I disabled tests that upgrade from older versions of ASDF than 3.x on CMUCL. Upgrade from recent versions works, because no such incompatible redefinition happens. Happily, CMUCL ships with a recent ASDF.

Revision history for this message
Robert P. Goldman (rpgoldman) wrote :

I'm going to mark this as "Won't Fix," so it vanishes from our listings.

AFAICT, this no longer causes test failures, and to the extent there's a bug here, it's in CMUCL and not ASDF. Finally, no one should be performing this update any more, because CMUCL ships with a more up-to-date ASDF.

Changed in asdf:
status: Confirmed → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.