12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #pragma clang diagnostic ignored "-Wcomment"
- /*
- fixme disabled in BATS because of gcfiles
- TEST_CONFIG OS=macosx BATS=0
- TEST_BUILD
- cp $DIR/gcfiles/* .
- $C{COMPILE} $DIR/gcenforcer-preflight.m -o gcenforcer-preflight.exe
- END
- */
- #include "test.h"
- #include <dlfcn.h>
- void check(int expected, const char *name)
- {
- int fd = open(name, O_RDONLY);
- testassert(fd >= 0);
- int result = objc_appRequiresGC(fd);
- close(fd);
- testprintf("want %2d got %2d for %s\n", expected, result, name);
- if (result != expected) {
- fail("want %2d got %2d for %s\n", expected, result, name);
- }
- testassert(result == expected);
- }
- int main()
- {
- int i;
- for (i = 0; i < 1000; i++) {
- // dlopen_preflight
- testassert(dlopen_preflight("libsupportsgc.dylib"));
- testassert(dlopen_preflight("libnoobjc.dylib"));
- testassert(! dlopen_preflight("librequiresgc.dylib"));
- testassert(dlopen_preflight("libnogc.dylib"));
- // objc_appRequiresGC
- // noobjc: no ObjC content
- // nogc: ordinary not GC
- // aso: trivial AppleScriptObjC wrapper that can run without GC
- // gc: -fobjc-gc
- // gconly: -fobjc-gc-only
- // gcaso: non-trivial AppleScriptObjC with too many classrefs
- // gcaso2: non-trivial AppleScriptObjC with too many class impls
- check(0, "x86_64-noobjc");
- check(0, "x86_64-nogc");
- check(0, "x86_64-aso");
- check(1, "x86_64-gc");
- check(1, "x86_64-gconly");
- check(1, "x86_64-gcaso");
- check(1, "x86_64-gcaso2");
-
- check(0, "i386-noobjc");
- check(0, "i386-nogc");
- check(0, "i386-aso");
- check(1, "i386-gc");
- check(1, "i386-gconly");
- check(1, "i386-gcaso");
- check(1, "i386-gcaso2");
-
- // fat files
- check(0, "i386-aso--x86_64-aso");
- check(0, "i386-nogc--x86_64-nogc");
- check(1, "i386-gc--x86_64-gc");
- check(1, "i386-gc--x86_64-nogc");
- check(1, "i386-nogc--x86_64-gc");
-
- // broken files
- check(-1, "x86_64-broken");
- check(-1, "i386-broken");
- check(-1, "i386-broken--x86_64-gc");
- check(-1, "i386-broken--x86_64-nogc");
- check(-1, "i386-gc--x86_64-broken");
- check(-1, "i386-nogc--x86_64-broken");
- // evil files
- // evil1: claims to have 4 billion load commands of size 0
- check(-1, "evil1");
- }
- succeed(__FILE__);
- }
|