Dear all, following the advice of Kostis, here is something anyone can easily run to try reproducing what seems a rather serious bug in XSB. The files foo.c and foo.H follow: ------------------------------ foo.c ------------------------------ #include <cinterf.h> #include <stdio.h> xsbBool foo() { prolog_term x = p2p_new(); if (is_var(x) == TRUE) printf("`x' is a variable: fine!\n"); if (c2p_list(x) == TRUE) printf("`c2p_list(x)' succeeded: fine!!\n"); // Hey, how can `x' still be a variable? if (is_var(x) == TRUE) printf("`x' is still a variable!!!\n"); return TRUE; } --------------------------- end of foo.c -------------------------- ------------------------------ foo.H ------------------------------ :- export foo/0. --------------------------- end of foo.H -------------------------- Then assume your XSB emulator directory is /usr/local/lib/xsb/2.5/emu and run echo "consult(foo, [cc('gcc'), cc_opts('-I/usr/local/lib/xsb/2.5/emu')]), foo." | xsb What I see is [xsb_configuration loaded] [sysinitrc loaded] [packaging loaded] XSB Version 2.5 (Okocim) of March 11, 2002 [i686-pc-linux-gnu; mode: optimal; engine: slg-wam; gc: indirection; scheduling: local] | ?- [Compiling Foreign Module ./foo (Prolog compiler options are ignored)] [foo compiled, cpu time used: 0.0000 seconds] [Compiling C file ./foo.c using gcc] In file included from /usr/local/lib/xsb/2.5/emu/export.h:28, from /usr/local/lib/xsb/2.5/emu/cinterf.h:155, from foo.c:1: /usr/local/lib/xsb/2.5/config/i686-pc-linux-gnu/xsb_config.h:275:28: warning: no newline at end of file [foo loaded] `x' is a variable: fine! `c2p_list(x)' succeeded: fine!! `x' is still a variable!!! yes | ?- End XSB (cputime 0.04 secs, elapsetime 0.16 secs) The warning given by gcc constitutes a problem in xsb_config.h that is totally unrelated, of course. Please let me know if you need further information. All the best Roberto -- Prof. Roberto Bagnara Computer Science Group Department of Mathematics, University of Parma, Italy http://www.cs.unipr.it/~bagnara/ mailto:bagnara@cs.unipr.it