| // RUN: %clang_cc1 -fblocks -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics -verify %s |
| |
| #if __has_feature(ptrauth_objc_signable_class) |
| @class TestClass; |
| typedef TestClass *ClassPtr; |
| typedef void(^BlockPtr)(); |
| @interface TestClass { |
| @public |
| __ptrauth(2, 1, 1) Class a; |
| __ptrauth(2, 1, 3) volatile Class vi; |
| __ptrauth(2, 1, 3) const Class ci; |
| __ptrauth(2, 1, 1) id b; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}} |
| __ptrauth(2, 1, 2) ClassPtr c; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}} |
| __ptrauth(2, 1, 2) BlockPtr d; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}} |
| } |
| |
| struct TestStruct { |
| __ptrauth(2, 1, 3) Class e; |
| __ptrauth(2, 1, 3) volatile Class vi; |
| __ptrauth(2, 1, 3) const Class ci; |
| __ptrauth(2, 1, 4) id f; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}} |
| __ptrauth(2, 1, 5) ClassPtr g; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}} |
| __ptrauth(2, 1, 2) BlockPtr h; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}} |
| }; |
| |
| @end |
| |
| void foo() { |
| __ptrauth(2, 1, 3) Class i; |
| __ptrauth(2, 1, 3) volatile Class vi; |
| __ptrauth(2, 1, 3) const Class ci = 0; |
| __ptrauth(2, 1, 4) id j; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'id' is invalid}} |
| __ptrauth(2, 1, 5) ClassPtr k; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'ClassPtr' (aka 'TestClass *') is invalid}} |
| __ptrauth(2, 1, 2) BlockPtr l; |
| // expected-error@-1 {{'__ptrauth' qualifier only applies to pointer or pointer sized integer types; 'BlockPtr' (aka 'void (^)()') is invalid}} |
| } |
| |
| #endif |