Artifact 132bb904b53c65d9cbe38a636409ca2ca00ea142af4f0316bb4b12e6b4731a12:
- File
src/runtime/class.m
— part of check-in
[3b3729a316]
at
2019-06-25 20:09:55
on branch trunk
— runtime: Don't use static selectors
Static selectors are initialized by a global constructor that might run
too late: If a class has a +[load] that triggers an +[initialize], this
could result in trying to call +[initialize] with the selector in
class.m still being uninitialized. When this happens, it results in a
weird looking crash in an entirely unrelated method. This is because
when uninitialized, the selector name has not been replaced with a
selector UID yet, meaning the pointer to the selector name is treated as
the selector UID. As the dispatch only considers the low 16 bits of the
selector UID for performance reasons, it will just take the low 16 bits
of the pointer to the selector name as the UID without any complaints.
This can then result in calling a random method on that class which then
crashes. (user: js, size: 21746) [annotate] [blame] [check-ins using]
A hex dump of this file is not available. Please download the raw binary file and generate a hex dump yourself.