[squeak-dev] renaming a class causes invalid super pointer CompiledMethod..!

Chris Muller ma.chris.m at gmail.com
Thu Jan 15 22:48:21 UTC 2015


I did a minor class-hierarchy refactoring today which resulted in a an
invalid super pointer, resulting in a confusing image lock up due to
tight recursion.  The script, below, demonstrates the issue in trunk:

Object compile: 'test  ^''Hello from Object'''.
(Object subclass: #MyClass instanceVariableNames: ''
classVariableNames: '' poolDictionaries: '' category: 'Test') compile:
'test  ^ super halt test, ''my super call lands on myself!'''.
(Smalltalk classNamed: #MyClass) rename: 'MyNewAbstraction'.
((Smalltalk classNamed: #MyNewAbstraction) subclass: #MyClass
instanceVariableNames: '' classVariableNames: '' poolDictionaries: ''
category: 'Test').
(Smalltalk classNamed: #MyNewAbstraction) new test

But an existing method in the original MyClass had a call to super
which now lands in itself, resulting in a tight recursion.

The same script without creating the new subclass results in an
instant VM crash (both interpreter 2357 and cog 3205):

Object compile: 'test  ^''Hello from Object'''.
(Object subclass: #MyClass instanceVariableNames: ''
classVariableNames: '' poolDictionaries: '' category: 'Test') compile:
'test  ^ super halt test, ''my super call lands on itself!'''.
(Smalltalk classNamed: #MyClass) rename: 'MyNewAbstraction'.
(Smalltalk classNamed: #MyNewAbstraction) new test

I even tried recompiling my entire class hierarchy which was renamed,
but it didn't help.

How can this be?  I _KNOW_ I've used rename class many times in the
past...  A regression?

I went all the way back to 4.2.  The above script doesn't crash the VM
in 4.2 or 4.3.  Squeak 4.4 and 4.5 and trunk all crash by the above
script.

All of those images (4.2 -- trunk) had the problem with the super
pointer back to itself..


More information about the Squeak-dev mailing list