1/*
2TEST_CRASHES
3TEST_RUN_OUTPUT
4objc\[\d+\]: tag index 7 used for two different classes \(was 0x[0-9a-fA-F]+ NSObject, now 0x[0-9a-fA-F]+ Protocol\)
5CRASHED: SIG(ILL|TRAP)
6OR
7no tagged pointers
8OK: badTagClass.m
9END
10*/
11
12#include "test.h"
13
14#include <objc/objc-internal.h>
15#include <objc/Protocol.h>
16
17#if OBJC_HAVE_TAGGED_POINTERS
18
19int main()
20{
21    // re-registration and nil registration allowed
22    _objc_registerTaggedPointerClass(OBJC_TAG_7, [NSObject class]);
23    _objc_registerTaggedPointerClass(OBJC_TAG_7, [NSObject class]);
24    _objc_registerTaggedPointerClass(OBJC_TAG_7, nil);
25    _objc_registerTaggedPointerClass(OBJC_TAG_7, [NSObject class]);
26
27    // colliding registration disallowed
28    _objc_registerTaggedPointerClass(OBJC_TAG_7, [Protocol class]);
29
30    fail(__FILE__);
31}
32
33#else
34
35int main()
36{
37    fprintf(stderr, "no tagged pointers\n");
38    succeed(__FILE__);
39}
40
41#endif
42