badTagClass.m 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. TEST_CRASHES
  3. TEST_BUILD_OUTPUT
  4. .*badTagClass.m:\d+:\d+: warning: null passed to a callee that requires a non-null argument \[-Wnonnull\]
  5. END
  6. TEST_RUN_OUTPUT
  7. objc\[\d+\]: tag index 1 used for two different classes \(was 0x[0-9a-fA-F]+ NSObject, now 0x[0-9a-fA-F]+ TestRoot\)
  8. objc\[\d+\]: HALTED
  9. OR
  10. no tagged pointers
  11. OK: badTagClass.m
  12. END
  13. */
  14. #include "test.h"
  15. #include "testroot.i"
  16. #include <objc/objc-internal.h>
  17. #include <objc/Protocol.h>
  18. #if OBJC_HAVE_TAGGED_POINTERS
  19. int main()
  20. {
  21. // re-registration and nil registration allowed
  22. _objc_registerTaggedPointerClass(OBJC_TAG_1, [NSObject class]);
  23. _objc_registerTaggedPointerClass(OBJC_TAG_1, [NSObject class]);
  24. _objc_registerTaggedPointerClass(OBJC_TAG_1, nil);
  25. _objc_registerTaggedPointerClass(OBJC_TAG_1, [NSObject class]);
  26. // colliding registration disallowed
  27. _objc_registerTaggedPointerClass(OBJC_TAG_1, [TestRoot class]);
  28. fail(__FILE__);
  29. }
  30. #else
  31. int main()
  32. {
  33. // provoke the same nullability warning as the real test
  34. objc_getClass(nil);
  35. fprintf(stderr, "no tagged pointers\n");
  36. succeed(__FILE__);
  37. }
  38. #endif