Happy new year! On Sun, 26 Dec 2004, I wrote:
Checking out a fresh GiNaC-1.3 tree and configuring --disable-shared (after having called autogen.sh) leaves one with three crashing binaries in the test suite. It seems to be independend of compiler flags. A shared library works, as does ginsh. (@Jens and Cebix: I reproduced this on wino.)
A stack backtrace indicates that GiNaC::basic::gethash() is being invoked on NULL:
(gdb) run Starting program: /autofs/medium/home/kreckel/projects/GiNaC-1.4/check/checks
Program received signal SIGSEGV, Segmentation fault. 0x08079827 in GiNaC::basic::gethash (this=0x0) at basic.h:254 254 if (flags & status_flags::hash_calculated) { (gdb) bt #0 0x08079827 in GiNaC::basic::gethash (this=0x0) at basic.h:254 #1 0x08078fcf in GiNaC::basic::is_equal (this=0x81feb70, other=@0x0) at basic.cpp:888 #2 0x08056bb2 in GiNaC::ex::is_equal (this=0xffffda30, other=@0x81fa5a4) at ex.h:399 #3 0x0805b2eb in GiNaC::ex::is_zero (this=0xffffda30) at ex.h:208 #4 0x08163bb8 in GiNaC::power::eval (this=0xffffdac0, level=1) at power.cpp:359 #5 0x0807e2d5 in GiNaC::ex::construct_from_basic (other=@0xffffdac0) at ex.cpp:287 #6 0x08050136 in ex (this=0x81fa8e4, other=@0xffffdac0) at ex.h:304 #7 0x08165c69 in GiNaC::power::evalf (this=0xffffdb60, level=0) at power.cpp:525 #8 0x081a279e in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at integral.cpp:206 #9 0x081a28a6 in global constructors keyed to _ZN5GiNaC8integral8reg_infoE () at container.h:130 #10 0x081a3825 in __do_global_ctors_aux () #11 0x0804dc19 in _init () #12 0x081a375b in __libc_csu_init () #13 0x557a57a2 in __libc_start_main () from /lib/tls/libc.so.6 #14 0xffffdc64 in ?? ()
Are we still having initialization order problems?
Chris, I'm afraid you introduced a new static initialization order problem when you sent us your integral.cpp file. You cannot initialize static ex integral::relative_integration_error like you do in integral.cpp:206. That does not take care of the initialization order. The ctor of class GiNaC::library_init is there to solve such problems. Please add a numeric and ex object representing the number 1e-8 in utils.h and utils.cpp and use that one instead. Would you please be so kind and sent a patch to this list for my review? Best wishes -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>