smarr / SOMpp

SOM++ - C++ implementation of the Simple Object Machine Smalltalk
12 stars 15 forks source link

Crashing incomplete classpath for Json benchmark #9

Open ltratt opened 3 years ago

ltratt commented 3 years ago

When I checkout the latest version of SOMpp, it passes the test suite, but crashes on the Json benchmark. The gdb backtrace looks as follows:

(gdb) run -cp core-lib/Smalltalk/ core-lib/Examples/Benchmarks/Json/Json.som
Starting program: /home/ltratt/SOMpp/SOM++ -cp core-lib/Smalltalk/ core-lib/Examples/Benchmarks/Json/Json.som                                                                        
This is SOM++
        garbage collector: copying
        not tagging integers
        not caching integers
--------------------------------------

Program received signal SIGSEGV, Segmentation fault.
0x000055555555d77d in VMObject::GetAdditionalSpaceConsumption() const ()
(gdb) bt
#0  0x000055555555d77d in VMObject::GetAdditionalSpaceConsumption() const ()
#1  0x000055555555d7c6 in VMArray::GetNumberOfIndexableFields() const ()
#2  0x000055555555d050 in ClassGenerationContext::SetInstanceFieldsOfSuper(VMArray*) ()
#3  0x00005555555681da in Parser::superclass(ClassGenerationContext*) ()
#4  0x0000555555567c09 in Parser::Classdef(ClassGenerationContext*) ()
#5  0x000055555556c33f in SourcecodeCompiler::compile(VMClass*) ()
#6  0x000055555556bdc6 in SourcecodeCompiler::CompileClass(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VMClass*) ()
#7  0x0000555555576250 in Universe::LoadClassBasic(VMSymbol*, VMClass*) ()
#8  0x00005555555760f3 in Universe::LoadClass(VMSymbol*) ()
#9  0x000055555558be6e in _System::Load_(Interpreter*, VMFrame*) ()
#10 0x000055555558c8e9 in Routine<_System>::Invoke(Interpreter*, VMFrame*) ()
#11 0x0000555555580d85 in VMPrimitive::Invoke(Interpreter*, VMFrame*) ()
#12 0x000055555556da08 in Interpreter::send(VMSymbol*, VMClass*) ()
#13 0x000055555556e4cf in Interpreter::doSend(long) ()
#14 0x000055555556d1b9 in Interpreter::Start() ()
#15 0x00005555555742d1 in Universe::interpretMethod(VMObject*, VMInvokable*, VMArray*) ()
#16 0x00005555555744d5 in Universe::initialize(long, char**) ()
#17 0x00005555555730fb in Universe::Start(long, char**) ()
--Type <RET> for more, q to quit, c to continue without paging--
#18 0x0000555555585138 in main ()

This is on Debian 4.19.118-2+deb10u1 x86_64 in case that's useful. It might be that I'm doing something stupid in the invocation of the benchmark, but I think this used to work?

ltratt commented 3 years ago

Ah, I did so something stupid (though perhaps not stupid enough to deserve a segfault ;) ) -- I forgot to include the benchmark directory cache in the classpath. Sorry for the noise!

smarr commented 3 years ago

Hm, indeed, there should be a bit more care taken. Though, the backtrace also looks strange. I reopened the issue.