xref: /llvm-project/clang/test/Preprocessor/ptrauth_feature.c (revision 3b162f73d8027dcd8261666a40e9bdfb40f4dacc)
11301cf48SDaniil Kovalev //// Note: preprocessor features exactly match corresponding clang driver flags. However, some flags are only intended to be used in combination with other ones.
21301cf48SDaniil Kovalev //// For example, -fptrauth-init-fini will not affect codegen without -fptrauth-calls, but the preprocessor feature would be set anyway.
3ad652efaSDaniil Kovalev 
41301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-intrinsics | \
5*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=INTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
6ad652efaSDaniil Kovalev 
71301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-calls | \
8*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,CALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
9ad652efaSDaniil Kovalev 
101301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-returns | \
11*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,RETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
12ad652efaSDaniil Kovalev 
131301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-vtable-pointer-address-discrimination | \
14*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,VPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
15ad652efaSDaniil Kovalev 
161301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-vtable-pointer-type-discrimination | \
17*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,VPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
1870c6e79eSDaniil Kovalev 
1970c6e79eSDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-type-info-vtable-pointer-discrimination | \
20*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,TYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
21ad652efaSDaniil Kovalev 
221301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-function-pointer-type-discrimination | \
23*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,FUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
24ae18b941SAkira Hatanaka 
251301cf48SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-init-fini | \
26*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,INITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
276e45fa95SDaniil Kovalev 
286e45fa95SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-init-fini-address-discrimination | \
29*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,INITFINI_ADDR_DISCR,NOGOTOS,NOELFGOT
3070c6e79eSDaniil Kovalev 
3170c6e79eSDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-indirect-gotos | \
32*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,GOTOS,NOELFGOT
33*3b162f73SDaniil Kovalev 
34*3b162f73SDaniil Kovalev // RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-elf-got | \
35*3b162f73SDaniil Kovalev // RUN:   FileCheck %s --check-prefixes=NOINTRIN,NOCALLS,NORETS,NOVPTR_ADDR_DISCR,NOVPTR_TYPE_DISCR,NOTYPE_INFO_DISCR,NOFUNC,NOINITFINI,NOINITFINI_ADDR_DISCR,NOGOTOS,ELFGOT
360481f049SAhmed Bougacha 
370481f049SAhmed Bougacha #if __has_feature(ptrauth_intrinsics)
380481f049SAhmed Bougacha // INTRIN: has_ptrauth_intrinsics
390481f049SAhmed Bougacha void has_ptrauth_intrinsics() {}
400481f049SAhmed Bougacha #else
410481f049SAhmed Bougacha // NOINTRIN: no_ptrauth_intrinsics
420481f049SAhmed Bougacha void no_ptrauth_intrinsics() {}
430481f049SAhmed Bougacha #endif
44ad652efaSDaniil Kovalev 
45ad652efaSDaniil Kovalev #if __has_feature(ptrauth_calls)
46ad652efaSDaniil Kovalev // CALLS: has_ptrauth_calls
47ad652efaSDaniil Kovalev void has_ptrauth_calls() {}
48ad652efaSDaniil Kovalev #else
49ad652efaSDaniil Kovalev // NOCALLS: no_ptrauth_calls
50ad652efaSDaniil Kovalev void no_ptrauth_calls() {}
51ad652efaSDaniil Kovalev #endif
52ad652efaSDaniil Kovalev 
53ad652efaSDaniil Kovalev // This is always enabled when ptrauth_calls is enabled
54ad652efaSDaniil Kovalev #if __has_feature(ptrauth_member_function_pointer_type_discrimination)
55ad652efaSDaniil Kovalev // CALLS: has_ptrauth_member_function_pointer_type_discrimination
56ad652efaSDaniil Kovalev void has_ptrauth_member_function_pointer_type_discrimination() {}
57ad652efaSDaniil Kovalev #else
58ad652efaSDaniil Kovalev // NOCALLS: no_ptrauth_member_function_pointer_type_discrimination
59ad652efaSDaniil Kovalev void no_ptrauth_member_function_pointer_type_discrimination() {}
60ad652efaSDaniil Kovalev #endif
61ad652efaSDaniil Kovalev 
62ad652efaSDaniil Kovalev #if __has_feature(ptrauth_returns)
63ad652efaSDaniil Kovalev // RETS: has_ptrauth_returns
64ad652efaSDaniil Kovalev void has_ptrauth_returns() {}
65ad652efaSDaniil Kovalev #else
66ad652efaSDaniil Kovalev // NORETS: no_ptrauth_returns
67ad652efaSDaniil Kovalev void no_ptrauth_returns() {}
68ad652efaSDaniil Kovalev #endif
69ad652efaSDaniil Kovalev 
70ad652efaSDaniil Kovalev #if __has_feature(ptrauth_vtable_pointer_address_discrimination)
71ad652efaSDaniil Kovalev // VPTR_ADDR_DISCR: has_ptrauth_vtable_pointer_address_discrimination
72ad652efaSDaniil Kovalev void has_ptrauth_vtable_pointer_address_discrimination() {}
73ad652efaSDaniil Kovalev #else
74ad652efaSDaniil Kovalev // NOVPTR_ADDR_DISCR: no_ptrauth_vtable_pointer_address_discrimination
75ad652efaSDaniil Kovalev void no_ptrauth_vtable_pointer_address_discrimination() {}
76ad652efaSDaniil Kovalev #endif
77ad652efaSDaniil Kovalev 
78ad652efaSDaniil Kovalev #if __has_feature(ptrauth_vtable_pointer_type_discrimination)
79ad652efaSDaniil Kovalev // VPTR_TYPE_DISCR: has_ptrauth_vtable_pointer_type_discrimination
80ad652efaSDaniil Kovalev void has_ptrauth_vtable_pointer_type_discrimination() {}
81ad652efaSDaniil Kovalev #else
82ad652efaSDaniil Kovalev // NOVPTR_TYPE_DISCR: no_ptrauth_vtable_pointer_type_discrimination
83ad652efaSDaniil Kovalev void no_ptrauth_vtable_pointer_type_discrimination() {}
84ad652efaSDaniil Kovalev #endif
85ad652efaSDaniil Kovalev 
8670c6e79eSDaniil Kovalev #if __has_feature(ptrauth_type_info_vtable_pointer_discrimination)
8770c6e79eSDaniil Kovalev // TYPE_INFO_DISCR: has_ptrauth_type_info_vtable_pointer_discrimination
8870c6e79eSDaniil Kovalev void has_ptrauth_type_info_vtable_pointer_discrimination() {}
8970c6e79eSDaniil Kovalev #else
9070c6e79eSDaniil Kovalev // NOTYPE_INFO_DISCR: no_ptrauth_type_info_vtable_pointer_discrimination
9170c6e79eSDaniil Kovalev void no_ptrauth_type_info_vtable_pointer_discrimination() {}
9270c6e79eSDaniil Kovalev #endif
9370c6e79eSDaniil Kovalev 
94ae18b941SAkira Hatanaka #if __has_feature(ptrauth_function_pointer_type_discrimination)
95ae18b941SAkira Hatanaka // FUNC: has_ptrauth_function_pointer_type_discrimination
96ae18b941SAkira Hatanaka void has_ptrauth_function_pointer_type_discrimination() {}
97ae18b941SAkira Hatanaka #else
98ae18b941SAkira Hatanaka // NOFUNC: no_ptrauth_function_pointer_type_discrimination
99ae18b941SAkira Hatanaka void no_ptrauth_function_pointer_type_discrimination() {}
100ae18b941SAkira Hatanaka #endif
1011301cf48SDaniil Kovalev 
1021301cf48SDaniil Kovalev #if __has_feature(ptrauth_init_fini)
1031301cf48SDaniil Kovalev // INITFINI: has_ptrauth_init_fini
1041301cf48SDaniil Kovalev void has_ptrauth_init_fini() {}
1051301cf48SDaniil Kovalev #else
1061301cf48SDaniil Kovalev // NOINITFINI: no_ptrauth_init_fini
1071301cf48SDaniil Kovalev void no_ptrauth_init_fini() {}
1081301cf48SDaniil Kovalev #endif
10970c6e79eSDaniil Kovalev 
1106e45fa95SDaniil Kovalev #if __has_feature(ptrauth_init_fini_address_discrimination)
1116e45fa95SDaniil Kovalev // INITFINI_ADDR_DISCR: has_ptrauth_init_fini_address_discrimination
1126e45fa95SDaniil Kovalev void has_ptrauth_init_fini_address_discrimination() {}
1136e45fa95SDaniil Kovalev #else
1146e45fa95SDaniil Kovalev // NOINITFINI_ADDR_DISCR: no_ptrauth_init_fini_address_discrimination
1156e45fa95SDaniil Kovalev void no_ptrauth_init_fini_address_discrimination() {}
1166e45fa95SDaniil Kovalev #endif
1176e45fa95SDaniil Kovalev 
11870c6e79eSDaniil Kovalev #if __has_feature(ptrauth_indirect_gotos)
11970c6e79eSDaniil Kovalev // GOTOS: has_ptrauth_indirect_gotos
12070c6e79eSDaniil Kovalev void has_ptrauth_indirect_gotos() {}
12170c6e79eSDaniil Kovalev #else
12270c6e79eSDaniil Kovalev // NOGOTOS: no_ptrauth_indirect_gotos
12370c6e79eSDaniil Kovalev void no_ptrauth_indirect_gotos() {}
12470c6e79eSDaniil Kovalev #endif
125*3b162f73SDaniil Kovalev 
126*3b162f73SDaniil Kovalev #if __has_feature(ptrauth_elf_got)
127*3b162f73SDaniil Kovalev // ELFGOT: has_ptrauth_elf_got
128*3b162f73SDaniil Kovalev void has_ptrauth_elf_got() {}
129*3b162f73SDaniil Kovalev #else
130*3b162f73SDaniil Kovalev // NOELFGOT: no_ptrauth_elf_got
131*3b162f73SDaniil Kovalev void no_ptrauth_elf_got() {}
132*3b162f73SDaniil Kovalev #endif
133