brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 5a3bd49 Raw
47 lines · plain
1// RUN: %clang_cc1 -fblocks -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics -verify %s2 3#if __has_feature(ptrauth_objc_signable_class)4@class TestClass;5typedef TestClass *ClassPtr;6typedef void(^BlockPtr)();7@interface TestClass {8@public9  __ptrauth(2, 1, 1) Class a;10  __ptrauth(2, 1, 3) volatile Class vi;11  __ptrauth(2, 1, 3) const Class ci;12  __ptrauth(2, 1, 1) id b;13  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}}14  __ptrauth(2, 1, 2) ClassPtr c;15  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}}16  __ptrauth(2, 1, 2) BlockPtr d;17  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}}18}19 20struct TestStruct {21  __ptrauth(2, 1, 3) Class e;22  __ptrauth(2, 1, 3) volatile Class vi;23  __ptrauth(2, 1, 3) const Class ci;24  __ptrauth(2, 1, 4) id f;25  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}}26  __ptrauth(2, 1, 5) ClassPtr g;27  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}}28  __ptrauth(2, 1, 2) BlockPtr h;29  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}}30};31 32@end33 34void foo() {35  __ptrauth(2, 1, 3) Class i;36  __ptrauth(2, 1, 3) volatile Class vi;37  __ptrauth(2, 1, 3) const Class ci = 0;38  __ptrauth(2, 1, 4) id j;39  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}}40  __ptrauth(2, 1, 5) ClassPtr k;41  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}}42  __ptrauth(2, 1, 2) BlockPtr l;43  // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}}44}45 46#endif47