Fix (and add test case for) a bug where objc_allocateClassPair() failed if the
superclass had not yet been loaded.main
parent
ae3b44ac78
commit
fb2e6756f6
@ -0,0 +1,38 @@
|
|||||||
|
#include "Test.h"
|
||||||
|
#include <objc/runtime.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// Regression test for a bug where allocating a class as a subclass of an
|
||||||
|
// unresolved class failed.
|
||||||
|
|
||||||
|
static int loaded;
|
||||||
|
|
||||||
|
static void load(Class self, SEL _cmd)
|
||||||
|
{
|
||||||
|
loaded++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Class a, b, c, d, e;
|
||||||
|
|
||||||
|
a = objc_allocateClassPair([Test class], "A", 0);
|
||||||
|
objc_registerClassPair(a);
|
||||||
|
|
||||||
|
b = objc_allocateClassPair(a, "B", 0);
|
||||||
|
class_addMethod(object_getClass(b), @selector(load), (IMP)load, "@:");
|
||||||
|
objc_registerClassPair(b);
|
||||||
|
class_getSuperclass(b);
|
||||||
|
|
||||||
|
c = objc_allocateClassPair(b, "C", 0);
|
||||||
|
objc_registerClassPair(c);
|
||||||
|
d = objc_allocateClassPair(c, "D", 0);
|
||||||
|
objc_registerClassPair(d);
|
||||||
|
e = objc_allocateClassPair(d, "E", 0);
|
||||||
|
objc_registerClassPair(e);
|
||||||
|
assert(loaded == 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue