Compiler problem with future-common-lisp:defstruct

"Patrick O'Donnell" <[email protected]> Fri, 30 Jan 2004 18:32:30 -0500 (EST)
Newsgroups gmane.lisp.org.slug
Message-ID <[email protected]>
Hello folks,

We just ran into a problem compiling a structure we're defining using
future-common-lisp:defstruct on Ivory.  For a structure with more than
44 (VLM) or 45 (UX) slots¹, compiling the constructor evidently runs
into an architectural limit on the frame size.  (Using zl:defstruct
works fine.)

We were just wondering if anyone has run into this, or better, has a
fix.

		- Patrick O'Donnell
		  [email protected]

¹As you might imagine, we discovered this migrating to OpenGenera.
We'd be living "on the edge", you might say, with a 45-slot structure
on UX boards.


;;; Example structure with problem:

(future-common-lisp:defstruct test
  slot-01 slot-02 slot-03 slot-04 slot-05
  slot-06 slot-07 slot-08 slot-09 slot-10
  slot-11 slot-12 slot-13 slot-14 slot-15
  slot-16 slot-17 slot-18 slot-19 slot-20
  slot-21 slot-22 slot-23 slot-24 slot-25
  slot-26 slot-27 slot-28 slot-29 slot-30
  slot-31 slot-32 slot-33 slot-34 slot-35
  slot-36 slot-37 slot-38 slot-39 slot-40
  slot-41 slot-42 slot-43 slot-44
  slot-45
  slot-46
;  slot-47
;  slot-48
;  slot-49
  )



Error: Can't frame split this function small enough;
       max size 97 exceeds architectural limit 96
While in the function COMPILER:CEMENT-FUNCTION  COMPILER:RUN-PHASE-2  COMPILER:COMPILE-DEFINITION-INTERNAL

The condition signalled was ZL:FERROR

COMPILER:CEMENT-FUNCTION  (P.C. = 256)
   Arg 0 (FUNCTION): #<(Internal Function) 401207407>
   Local 1 (COMPILER:SHUFFLE-AMOUNT): 0
   Local 2 (COMPILER:INTERVAL): #S(COMPILER:INTERVAL :INTERVAL-FIRST #<(No op) 401207330> :INTERVAL-LAST #<(No op) 401207670> :INTERVAL-MAX-LEVEL 97)
   Local 3 (MAX): 96
   Special COMPILER:*LOCAL-BLOCK-OFFSET*: 1
   Special COMPILER:*L-LEVEL*: 1
   Special COMPILER:*MAX-L-LEVEL*: 1
   Special COMPILER:*MAX-LEVEL*: 97
   Special COMPILER:*FUNCTION*: #<(Internal Function) 401207407>

COMPILER:RUN-PHASE-2  (P.C. = 140)

COMPILER:COMPILE-DEFINITION-INTERNAL  (P.C. = 216)
   Arg 0 (COMPILER:TYPE): DEFUN
   Arg 1 (COMPILER:LAMBDA-LIST): (&KEY (#:SLOT-01 NIL #:G44689) (#:SLOT-02 NIL #:G44690) (#:SLOT-03 NIL #:G44691) (#:SLOT-04 NIL #:G44692) (#:SLOT-05 NIL #:G44693) (#:SLOT-06 NIL #:G44694) (#:SLOT-07 NIL #:G44695) (#:SLOT-08 NIL #:G44696) (#:SLOT-09 NIL #:G44697) ...)
   Arg 2 (COMPILER:DEBUG-INFO): NIL
   Arg 3 (COMPILER:DEFINITION): ((DECLARE (SYS:FUNCTION-NAME USER::MAKE-TEST)) (DECLARE (LT:INLINE-FORM #S(LT:INLINE-FORM :NAME USER::MAKE-TEST :LAMBDA-LIST # :BODY # :ENV NIL :FORM ...))) (BLOCK USER::MAKE-TEST (FUNCALL (FUNCTION #) *DEFAULT-CONS-AREA* #:SLOT-01 #:G44689 #:SLOT-02 #:G44690 #:SLOT-03 #:G44691 #:SLOT-04 ...)))
   Arg 4 (COMPILER:FIXUP-P): T
   Arg 5 (COMPILER:ENVIRONMENT): (NIL NIL NIL NIL (((LT::MAPFORMS-ENVIRONMENT-TAG #<LOCATIVE 36601364551>))) NIL NIL)
   Special COMPILER:*LOCAL-BLOCK-SIZE-ADJUSTMENT*: 2
   Special COMPILER:*N-RETRIES*: 0

COMPILER:COMPILE-LAMBDA-EXP  (P.C. = 52)
   Arg 0 (COMPILER:LAMBDA-EXP): (LAMBDA (&KEY (#:SLOT-01 NIL #:G44689) (#:SLOT-02 NIL #:G44690) (#:SLOT-03 NIL #:G44691) (#:SLOT-04 NIL #:G44692) (#:SLOT-05 NIL #:G44693) (#:SLOT-06 NIL #:G44694) (#:SLOT-07 NIL #:G44695) (#:SLOT-08 NIL #:G44696) (#:SLOT-09 NIL #:G44697) ...) (DECLARE (SYS:FUNCTION-NAME USER::MAKE-TEST)) (DECLARE (LT:INLINE-FORM #S(LT:INLINE-FORM :NAME USER::MAKE-TEST :LAMBDA-LIST # :BODY # :ENV NIL :FORM ...))) (BLOCK USER::MAKE-TEST (FUNCALL (FUNCTION #) *DEFAULT-CONS-AREA* #:SLOT-01 #:G44689 #:SLOT-02 #:G44690 #:SLOT-03 #:G44691 #:SLOT-04 ...)))
   Arg 1 (COMPILER:FIXUP-P): T
   Arg 2 (COMPILER:DEBUG-INFO): NIL
   Arg 3 (COMPILER:ENVIRONMENT): (NIL NIL NIL NIL (((LT::MAPFORMS-ENVIRONMENT-TAG #<LOCATIVE 36601364551>))) NIL NIL)