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