[Ecls-list] Compiler broken?

Juan Jose Garcia-Ripoll jjgarcia at users.sourceforge.net
Mon May 12 09:11:43 UTC 2008

On Sat, May 10, 2008 at 1:55 AM, Ralf Mattes <rm at mh-freiburg.de> wrote:
> Hello list,
>   while trying to compile usockets I get the following error:
>  ;;; Note: Invoking external command:
>  ;;; /usr/bin/gcc-4.1  -D_GNU_SOURCE -g -O2 -fPIC  -fstrict-aliasing -Dlinux -O "-I/usr/include/" -w -c "/var/cache/common-lisp-controller/1111/ecl/local/LISP/usocket-svn/backend/sbcl.c" -o "/var/cache/common-lisp-controller/1111/ecl/local/LISP/usocket-svn/backend/sbcl.o"
>  /var/cache/common-lisp-controller/1111/ecl/local/LISP/usocket-svn/backend/sbcl.c: In function 'L3read_select':
>  /var/cache/common-lisp-controller/1111/ecl/local/LISP/usocket-svn/backend/sbcl.c:57: error: 'union cl_lispunion' has no member named 'cons'

This happened at some point in the CVS tree (I am talking about a week
ago) in which the file ecl/config.h was installed without a line
saying #define ECL_SMALL_CONS but you could experience the same
problem if you have two installations of ECL with different
configuration flags -- like headers of ECL from a previous build still
there, or headers from the Debian original package as well.

>  According to ecl/object.h cl_lispunion only has a cons member when build
>  without smallcons enabled. Is this a compiler bug?

No, this is correct. When building with ECL_SMALL_CONS, the cons can
no longer be access through the ecl_lispunion structure. The pointer
to the cons has to be first decoded and then dereferenced.

BTW, I just downloaded and built USOCKET and there is a serious bug
that prevents building it in Mac OS X and causes memory leaks. The
function get-host-name should read

  (defun get-host-name ()
     () () :object
     "{ char *buf = GC_malloc(257);

        if (gethostname(buf,256) == 0)
           @(return) = ecl_cstring_to_base_string_or_nil(buf);
           @(return) = Cnil;
      }" :one-liner nil :side-effects nil)))

Before they were using strndup() that makes copies and copies of the
string with malloc() and these copies are not garbage collected.


Facultad de Fisicas, Universidad Complutense,
Ciudad Universitaria s/n Madrid 28040 (Spain)

More information about the ecl-devel mailing list