[Ecls-list] generation of invalid C code (type cast)

Pascal J. Bourguignon pjb at informatimago.com
Thu Jun 3 00:50:56 UTC 2010

When compiling raiden-decipher (from
), ecl-10.4.2 (obtained from git yesterday) fails with:

;;; Emitting code for AUTO-TEST.
;;; Note:
;;;   Invoking external command:
;;;   gcc "-I/home/pjb/opt-planner-ecl/include/"  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -fPIC  -D_THREAD_SAFE -Dlinux -O -w -c "/home/pjb/.fasls/ecl-10.4.2-linux-unknown/data/lisp/packages/com/informatimago/common-lisp/OBJ-ECL-1042-X86_64/raiden.c" -o "/home/pjb/.fasls/ecl-10.4.2-linux-unknown/data/lisp/packages/com/informatimago/common-lisp/OBJ-ECL-1042-X86_64/raiden.o"
;;; /home/pjb/.fasls/ecl-10.4.2-linux-unknown/data/lisp/packages/com/informatimago/common-lisp/OBJ-ECL-1042-X86_64/raiden.c: In function ‘L4raiden_decipher’:
/home/pjb/.fasls/ecl-10.4.2-linux-unknown/data/lisp/packages/com/informatimago/common-lisp/OBJ-ECL-1042-X86_64/raiden.c:235: error: lvalue required as left operand of assignment
[pjb at kuiper :0.0 lisp]$ 

The line 235 is:

	V10= ((cl_fixnum)(V6)->vector.self.b32[V11]= V12);}}

and the problem is that a typecast is not a lvalue.

The source expression is:

           (setf (aref sks i)
                 (setf (aref k (mod i 4))
                       (32bit (+ (aref k 0) (aref k 1)
                                 (logxor (+ (aref k 2) (aref k 3))
                                         (32bit (ash (aref k 0)
                                                     (mod (aref k 2) 32))))))))

The vectors are declared to contain (unsigned-bit 32) elements, and 
the host is a 64-bit linux:
Linux kuiper 2.6.32-xen-r1-nfs #6 SMP Tue May 18 23:25:57 CEST 2010 x86_64 Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz GenuineIntel GNU/Linux

__Pascal Bourguignon__                     http://www.informatimago.com/

More information about the ecl-devel mailing list