darling-objc4/test/load-reentrant.m
2020-06-09 21:50:17 -04:00

37 lines
723 B
Objective-C

/*
TEST_BUILD
$C{COMPILE} $DIR/load-reentrant.m -o load-reentrant.exe
$C{COMPILE} $DIR/load-reentrant2.m -o libload-reentrant2.dylib -bundle -bundle_loader load-reentrant.exe
END
*/
#include "test.h"
#include <dlfcn.h>
int state1 = 0;
int *state2_p;
OBJC_ROOT_CLASS
@interface One @end
@implementation One
+(void)load
{
state1 = 111;
// Re-entrant +load doesn't get to complete until we do
void *dlh = dlopen("libload-reentrant2.dylib", RTLD_LAZY);
testassert(dlh);
state2_p = (int *)dlsym(dlh, "state2");
testassert(state2_p);
testassert(*state2_p == 0);
state1 = 1;
}
@end
int main()
{
testassert(state1 == 1 && state2_p && *state2_p == 2);
succeed(__FILE__);
}