brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.5 KiB · a81ef1c Raw
438 lines · cpp
1// RUN: %clang_cc1 -triple arm64               -std=c++26 -Wno-deprecated-builtins \2// RUN:                                        -fsyntax-only -verify %s3// RUN: %clang_cc1 -triple arm64-apple-darwin -fptrauth-calls -fptrauth-intrinsics \4// RUN:                                       -fptrauth-vtable-pointer-address-discrimination \5// RUN:                                       -std=c++26 -Wno-deprecated-builtins \6// RUN:                                       -fsyntax-only -verify %s7 8// expected-no-diagnostics9 10#ifdef __PTRAUTH__11#define PTRAUTH_ENABLED 112#define NonAddressDiscriminatedVTablePtrAttr \13  [[clang::ptrauth_vtable_pointer(process_independent, no_address_discrimination, no_extra_discrimination)]]14#define AddressDiscriminatedVTablePtrAttr \15  [[clang::ptrauth_vtable_pointer(process_independent, address_discrimination, no_extra_discrimination)]]16#define ADDR_DISC_ENABLED true17#else18#define PTRAUTH_ENABLED 019#define NonAddressDiscriminatedVTablePtrAttr20#define AddressDiscriminatedVTablePtrAttr21#define ADDR_DISC_ENABLED false22#define __ptrauth(...)23#endif24 25 26typedef int* __ptrauth(1,1,1) AddressDiscriminatedPtr;27typedef __UINT64_TYPE__ __ptrauth(1,1,1) AddressDiscriminatedInt64;28struct AddressDiscriminatedFields {29  AddressDiscriminatedPtr ptr;30};31struct RelocatableAddressDiscriminatedFields trivially_relocatable_if_eligible {32  AddressDiscriminatedPtr ptr;33};34struct AddressDiscriminatedFieldInBaseClass : AddressDiscriminatedFields {35  void *newfield;36};37 38struct NonAddressDiscriminatedVTablePtrAttr NonAddressDiscriminatedVTablePtr {39  virtual ~NonAddressDiscriminatedVTablePtr();40  void *i;41};42 43struct NonAddressDiscriminatedVTablePtrAttr NonAddressDiscriminatedVTablePtr2 {44  virtual ~NonAddressDiscriminatedVTablePtr2();45  void *j;46};47 48struct NonAddressDiscriminatedVTablePtrAttr RelocatableNonAddressDiscriminatedVTablePtr trivially_relocatable_if_eligible {49  virtual ~RelocatableNonAddressDiscriminatedVTablePtr();50  void *i;51};52 53struct NonAddressDiscriminatedVTablePtrAttr RelocatableNonAddressDiscriminatedVTablePtr2 trivially_relocatable_if_eligible {54  virtual ~RelocatableNonAddressDiscriminatedVTablePtr2();55  void *j;56};57 58struct AddressDiscriminatedVTablePtrAttr AddressDiscriminatedVTablePtr {59  virtual ~AddressDiscriminatedVTablePtr();60  void *k;61};62 63struct AddressDiscriminatedVTablePtrAttr RelocatableAddressDiscriminatedVTablePtr trivially_relocatable_if_eligible {64  virtual ~RelocatableAddressDiscriminatedVTablePtr();65  void *k;66};67 68struct NoAddressDiscriminatedBaseClasses : NonAddressDiscriminatedVTablePtr,69                                           NonAddressDiscriminatedVTablePtr2 {70  void *l;71};72 73struct RelocatableNoAddressDiscriminatedBaseClasses trivially_relocatable_if_eligible :74                                           NonAddressDiscriminatedVTablePtr,75                                           NonAddressDiscriminatedVTablePtr2 {76  void *l;77};78 79struct AddressDiscriminatedPrimaryBase : AddressDiscriminatedVTablePtr,80                                         NonAddressDiscriminatedVTablePtr {81  void *l;82};83struct AddressDiscriminatedSecondaryBase : NonAddressDiscriminatedVTablePtr,84                                           AddressDiscriminatedVTablePtr {85  void *l;86};87 88struct RelocatableAddressDiscriminatedPrimaryBase : RelocatableAddressDiscriminatedVTablePtr,89                                         RelocatableNonAddressDiscriminatedVTablePtr {90  void *l;91};92struct RelocatableAddressDiscriminatedSecondaryBase : RelocatableNonAddressDiscriminatedVTablePtr,93                                           RelocatableAddressDiscriminatedVTablePtr {94  void *l;95};96struct EmbdeddedAddressDiscriminatedPolymorphicClass {97  AddressDiscriminatedVTablePtr field;98};99struct RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass trivially_relocatable_if_eligible {100  AddressDiscriminatedVTablePtr field;101};102 103static_assert( __is_pod(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);104static_assert( __is_pod(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);105static_assert( __is_pod(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);106static_assert( __is_pod(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);107static_assert(!__is_pod(AddressDiscriminatedFieldInBaseClass));108static_assert(!__is_pod(NonAddressDiscriminatedVTablePtr));109static_assert(!__is_pod(NonAddressDiscriminatedVTablePtr2));110static_assert(!__is_pod(RelocatableNonAddressDiscriminatedVTablePtr));111static_assert(!__is_pod(RelocatableNonAddressDiscriminatedVTablePtr2));112static_assert(!__is_pod(AddressDiscriminatedVTablePtr));113static_assert(!__is_pod(RelocatableAddressDiscriminatedVTablePtr));114static_assert(!__is_pod(NoAddressDiscriminatedBaseClasses));115static_assert(!__is_pod(RelocatableNoAddressDiscriminatedBaseClasses));116static_assert(!__is_pod(AddressDiscriminatedPrimaryBase));117static_assert(!__is_pod(AddressDiscriminatedSecondaryBase));118static_assert(!__is_pod(RelocatableAddressDiscriminatedPrimaryBase));119static_assert(!__is_pod(RelocatableAddressDiscriminatedSecondaryBase));120static_assert(!__is_pod(EmbdeddedAddressDiscriminatedPolymorphicClass));121static_assert(!__is_pod(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));122 123static_assert( __is_standard_layout(AddressDiscriminatedPtr));124static_assert( __is_standard_layout(AddressDiscriminatedInt64));125static_assert( __is_standard_layout(AddressDiscriminatedFields));126static_assert( __is_standard_layout(RelocatableAddressDiscriminatedFields));127static_assert(!__is_standard_layout(AddressDiscriminatedFieldInBaseClass));128static_assert(!__is_standard_layout(NonAddressDiscriminatedVTablePtr));129static_assert(!__is_standard_layout(NonAddressDiscriminatedVTablePtr2));130static_assert(!__is_standard_layout(RelocatableNonAddressDiscriminatedVTablePtr));131static_assert(!__is_standard_layout(RelocatableNonAddressDiscriminatedVTablePtr2));132static_assert(!__is_standard_layout(AddressDiscriminatedVTablePtr));133static_assert(!__is_standard_layout(RelocatableAddressDiscriminatedVTablePtr));134static_assert(!__is_standard_layout(NoAddressDiscriminatedBaseClasses));135static_assert(!__is_standard_layout(RelocatableNoAddressDiscriminatedBaseClasses));136static_assert(!__is_standard_layout(AddressDiscriminatedPrimaryBase));137static_assert(!__is_standard_layout(AddressDiscriminatedSecondaryBase));138static_assert(!__is_standard_layout(RelocatableAddressDiscriminatedPrimaryBase));139static_assert(!__is_standard_layout(RelocatableAddressDiscriminatedSecondaryBase));140static_assert(!__is_standard_layout(EmbdeddedAddressDiscriminatedPolymorphicClass));141static_assert(!__is_standard_layout(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));142 143static_assert( __has_trivial_move_constructor(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);144static_assert( __has_trivial_move_constructor(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);145static_assert( __has_trivial_move_constructor(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);146static_assert( __has_trivial_move_constructor(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);147static_assert( __has_trivial_move_constructor(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);148static_assert(!__has_trivial_move_constructor(NonAddressDiscriminatedVTablePtr));149static_assert(!__has_trivial_move_constructor(NonAddressDiscriminatedVTablePtr2));150static_assert(!__has_trivial_move_constructor(RelocatableNonAddressDiscriminatedVTablePtr));151static_assert(!__has_trivial_move_constructor(RelocatableNonAddressDiscriminatedVTablePtr2));152static_assert(!__has_trivial_move_constructor(AddressDiscriminatedVTablePtr));153static_assert(!__has_trivial_move_constructor(RelocatableAddressDiscriminatedVTablePtr));154static_assert(!__has_trivial_move_constructor(NoAddressDiscriminatedBaseClasses));155static_assert(!__has_trivial_move_constructor(RelocatableNoAddressDiscriminatedBaseClasses));156static_assert(!__has_trivial_move_constructor(AddressDiscriminatedPrimaryBase));157static_assert(!__has_trivial_move_constructor(AddressDiscriminatedSecondaryBase));158static_assert(!__has_trivial_move_constructor(RelocatableAddressDiscriminatedPrimaryBase));159static_assert(!__has_trivial_move_constructor(RelocatableAddressDiscriminatedSecondaryBase));160static_assert(!__has_trivial_move_constructor(EmbdeddedAddressDiscriminatedPolymorphicClass));161static_assert(!__has_trivial_move_constructor(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));162 163static_assert( __has_trivial_copy(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);164static_assert( __has_trivial_copy(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);165static_assert( __has_trivial_copy(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);166static_assert( __has_trivial_copy(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);167static_assert( __has_trivial_copy(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);168static_assert(!__has_trivial_copy(NonAddressDiscriminatedVTablePtr));169static_assert(!__has_trivial_copy(NonAddressDiscriminatedVTablePtr2));170static_assert(!__has_trivial_copy(RelocatableNonAddressDiscriminatedVTablePtr));171static_assert(!__has_trivial_copy(RelocatableNonAddressDiscriminatedVTablePtr2));172static_assert(!__has_trivial_copy(AddressDiscriminatedVTablePtr));173static_assert(!__has_trivial_copy(RelocatableAddressDiscriminatedVTablePtr));174static_assert(!__has_trivial_copy(NoAddressDiscriminatedBaseClasses));175static_assert(!__has_trivial_copy(RelocatableNoAddressDiscriminatedBaseClasses));176static_assert(!__has_trivial_copy(AddressDiscriminatedPrimaryBase));177static_assert(!__has_trivial_copy(AddressDiscriminatedSecondaryBase));178static_assert(!__has_trivial_copy(RelocatableAddressDiscriminatedPrimaryBase));179static_assert(!__has_trivial_copy(RelocatableAddressDiscriminatedSecondaryBase));180static_assert(!__has_trivial_copy(EmbdeddedAddressDiscriminatedPolymorphicClass));181static_assert(!__has_trivial_copy(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));182 183static_assert( __has_trivial_assign(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);184static_assert( __has_trivial_assign(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);185static_assert( __has_trivial_assign(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);186static_assert( __has_trivial_assign(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);187static_assert( __has_trivial_assign(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);188static_assert(!__has_trivial_assign(NonAddressDiscriminatedVTablePtr));189static_assert(!__has_trivial_assign(NonAddressDiscriminatedVTablePtr2));190static_assert(!__has_trivial_assign(RelocatableNonAddressDiscriminatedVTablePtr));191static_assert(!__has_trivial_assign(RelocatableNonAddressDiscriminatedVTablePtr2));192static_assert(!__has_trivial_assign(AddressDiscriminatedVTablePtr));193static_assert(!__has_trivial_assign(RelocatableAddressDiscriminatedVTablePtr));194static_assert(!__has_trivial_assign(NoAddressDiscriminatedBaseClasses));195static_assert(!__has_trivial_assign(RelocatableNoAddressDiscriminatedBaseClasses));196static_assert(!__has_trivial_assign(AddressDiscriminatedPrimaryBase));197static_assert(!__has_trivial_assign(AddressDiscriminatedSecondaryBase));198static_assert(!__has_trivial_assign(RelocatableAddressDiscriminatedPrimaryBase));199static_assert(!__has_trivial_assign(RelocatableAddressDiscriminatedSecondaryBase));200static_assert(!__has_trivial_assign(EmbdeddedAddressDiscriminatedPolymorphicClass));201static_assert(!__has_trivial_assign(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));202 203static_assert( __has_trivial_move_assign(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);204static_assert( __has_trivial_move_assign(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);205static_assert( __has_trivial_move_assign(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);206static_assert( __has_trivial_move_assign(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);207static_assert( __has_trivial_move_assign(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);208static_assert(!__has_trivial_move_assign(NonAddressDiscriminatedVTablePtr));209static_assert(!__has_trivial_move_assign(NonAddressDiscriminatedVTablePtr2));210static_assert(!__has_trivial_move_assign(RelocatableNonAddressDiscriminatedVTablePtr));211static_assert(!__has_trivial_move_assign(RelocatableNonAddressDiscriminatedVTablePtr2));212static_assert(!__has_trivial_move_assign(AddressDiscriminatedVTablePtr));213static_assert(!__has_trivial_move_assign(RelocatableAddressDiscriminatedVTablePtr));214static_assert(!__has_trivial_move_assign(NoAddressDiscriminatedBaseClasses));215static_assert(!__has_trivial_move_assign(RelocatableNoAddressDiscriminatedBaseClasses));216static_assert(!__has_trivial_move_assign(AddressDiscriminatedPrimaryBase));217static_assert(!__has_trivial_move_assign(AddressDiscriminatedSecondaryBase));218static_assert(!__has_trivial_move_assign(RelocatableAddressDiscriminatedPrimaryBase));219static_assert(!__has_trivial_move_assign(RelocatableAddressDiscriminatedSecondaryBase));220static_assert(!__has_trivial_move_assign(EmbdeddedAddressDiscriminatedPolymorphicClass));221static_assert(!__has_trivial_move_assign(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));222 223static_assert( __is_trivial(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);224static_assert( __is_trivial(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);225static_assert( __is_trivial(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);226static_assert( __is_trivial(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);227static_assert( __is_trivial(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);228static_assert(!__is_trivial(NonAddressDiscriminatedVTablePtr));229static_assert(!__is_trivial(NonAddressDiscriminatedVTablePtr2));230static_assert(!__is_trivial(RelocatableNonAddressDiscriminatedVTablePtr));231static_assert(!__is_trivial(RelocatableNonAddressDiscriminatedVTablePtr2));232static_assert(!__is_trivial(AddressDiscriminatedVTablePtr));233static_assert(!__is_trivial(RelocatableAddressDiscriminatedVTablePtr));234static_assert(!__is_trivial(NoAddressDiscriminatedBaseClasses));235static_assert(!__is_trivial(RelocatableNoAddressDiscriminatedBaseClasses));236static_assert(!__is_trivial(AddressDiscriminatedPrimaryBase));237static_assert(!__is_trivial(AddressDiscriminatedSecondaryBase));238static_assert(!__is_trivial(RelocatableAddressDiscriminatedPrimaryBase));239static_assert(!__is_trivial(RelocatableAddressDiscriminatedSecondaryBase));240static_assert(!__is_trivial(EmbdeddedAddressDiscriminatedPolymorphicClass));241static_assert(!__is_trivial(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));242 243static_assert( __is_trivially_copyable(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);244static_assert( __is_trivially_copyable(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);245static_assert( __is_trivially_copyable(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);246static_assert( __is_trivially_copyable(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);247static_assert( __is_trivially_copyable(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);248static_assert(!__is_trivially_copyable(NonAddressDiscriminatedVTablePtr));249static_assert(!__is_trivially_copyable(NonAddressDiscriminatedVTablePtr2));250static_assert(!__is_trivially_copyable(RelocatableNonAddressDiscriminatedVTablePtr));251static_assert(!__is_trivially_copyable(RelocatableNonAddressDiscriminatedVTablePtr2));252static_assert(!__is_trivially_copyable(AddressDiscriminatedVTablePtr));253static_assert(!__is_trivially_copyable(RelocatableAddressDiscriminatedVTablePtr));254static_assert(!__is_trivially_copyable(NoAddressDiscriminatedBaseClasses));255static_assert(!__is_trivially_copyable(RelocatableNoAddressDiscriminatedBaseClasses));256static_assert(!__is_trivially_copyable(AddressDiscriminatedPrimaryBase));257static_assert(!__is_trivially_copyable(AddressDiscriminatedSecondaryBase));258static_assert(!__is_trivially_copyable(RelocatableAddressDiscriminatedPrimaryBase));259static_assert(!__is_trivially_copyable(RelocatableAddressDiscriminatedSecondaryBase));260static_assert(!__is_trivially_copyable(EmbdeddedAddressDiscriminatedPolymorphicClass));261static_assert(!__is_trivially_copyable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));262 263static_assert( __is_trivially_equality_comparable(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);264static_assert( __is_trivially_equality_comparable(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);265static_assert(!__is_trivially_equality_comparable(AddressDiscriminatedFields));266static_assert(!__is_trivially_equality_comparable(RelocatableAddressDiscriminatedFields));267static_assert(!__is_trivially_equality_comparable(AddressDiscriminatedFieldInBaseClass));268static_assert(!__is_trivially_equality_comparable(NonAddressDiscriminatedVTablePtr));269static_assert(!__is_trivially_equality_comparable(NonAddressDiscriminatedVTablePtr2));270static_assert(!__is_trivially_equality_comparable(RelocatableNonAddressDiscriminatedVTablePtr));271static_assert(!__is_trivially_equality_comparable(RelocatableNonAddressDiscriminatedVTablePtr2));272static_assert(!__is_trivially_equality_comparable(AddressDiscriminatedVTablePtr));273static_assert(!__is_trivially_equality_comparable(RelocatableAddressDiscriminatedVTablePtr));274static_assert(!__is_trivially_equality_comparable(NoAddressDiscriminatedBaseClasses));275static_assert(!__is_trivially_equality_comparable(RelocatableNoAddressDiscriminatedBaseClasses));276static_assert(!__is_trivially_equality_comparable(AddressDiscriminatedPrimaryBase));277static_assert(!__is_trivially_equality_comparable(AddressDiscriminatedSecondaryBase));278static_assert(!__is_trivially_equality_comparable(RelocatableAddressDiscriminatedPrimaryBase));279static_assert(!__is_trivially_equality_comparable(RelocatableAddressDiscriminatedSecondaryBase));280static_assert(!__is_trivially_equality_comparable(EmbdeddedAddressDiscriminatedPolymorphicClass));281static_assert(!__is_trivially_equality_comparable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));282 283static_assert( __is_trivially_relocatable(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);284static_assert( __is_trivially_relocatable(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);285static_assert( __is_trivially_relocatable(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);286static_assert( __is_trivially_relocatable(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);287static_assert( __is_trivially_relocatable(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);288static_assert(!__is_trivially_relocatable(NonAddressDiscriminatedVTablePtr));289static_assert(!__is_trivially_relocatable(NonAddressDiscriminatedVTablePtr2));290static_assert(!__is_trivially_relocatable(RelocatableNonAddressDiscriminatedVTablePtr));291static_assert(!__is_trivially_relocatable(RelocatableNonAddressDiscriminatedVTablePtr2));292static_assert(!__is_trivially_relocatable(AddressDiscriminatedVTablePtr));293static_assert(!__is_trivially_relocatable(RelocatableAddressDiscriminatedVTablePtr));294static_assert(!__is_trivially_relocatable(NoAddressDiscriminatedBaseClasses));295static_assert(!__is_trivially_relocatable(RelocatableNoAddressDiscriminatedBaseClasses));296static_assert(!__is_trivially_relocatable(AddressDiscriminatedPrimaryBase));297static_assert(!__is_trivially_relocatable(AddressDiscriminatedSecondaryBase));298static_assert(!__is_trivially_relocatable(RelocatableAddressDiscriminatedPrimaryBase));299static_assert(!__is_trivially_relocatable(RelocatableAddressDiscriminatedSecondaryBase));300static_assert(!__is_trivially_relocatable(EmbdeddedAddressDiscriminatedPolymorphicClass));301static_assert(!__is_trivially_relocatable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));302 303static_assert( __builtin_is_cpp_trivially_relocatable(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);304static_assert( __builtin_is_cpp_trivially_relocatable(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);305static_assert( __builtin_is_cpp_trivially_relocatable(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);306static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);307static_assert( __builtin_is_cpp_trivially_relocatable(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);308static_assert(!__builtin_is_cpp_trivially_relocatable(NonAddressDiscriminatedVTablePtr));309static_assert(!__builtin_is_cpp_trivially_relocatable(NonAddressDiscriminatedVTablePtr2));310static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableNonAddressDiscriminatedVTablePtr));311static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableNonAddressDiscriminatedVTablePtr2));312static_assert(!__builtin_is_cpp_trivially_relocatable(AddressDiscriminatedVTablePtr));313static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableAddressDiscriminatedVTablePtr) == !ADDR_DISC_ENABLED);314static_assert(!__builtin_is_cpp_trivially_relocatable(NoAddressDiscriminatedBaseClasses));315static_assert(!__builtin_is_cpp_trivially_relocatable(RelocatableNoAddressDiscriminatedBaseClasses));316static_assert(!__builtin_is_cpp_trivially_relocatable(AddressDiscriminatedPrimaryBase));317static_assert(!__builtin_is_cpp_trivially_relocatable(AddressDiscriminatedSecondaryBase));318static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableAddressDiscriminatedPrimaryBase) == !ADDR_DISC_ENABLED);319static_assert( __builtin_is_cpp_trivially_relocatable(RelocatableAddressDiscriminatedSecondaryBase) == !ADDR_DISC_ENABLED);320static_assert(!__builtin_is_cpp_trivially_relocatable(EmbdeddedAddressDiscriminatedPolymorphicClass));321static_assert(!__builtin_is_cpp_trivially_relocatable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));322 323static_assert( __builtin_is_replaceable(AddressDiscriminatedPtr));324static_assert( __builtin_is_replaceable(AddressDiscriminatedInt64));325static_assert( __builtin_is_replaceable(AddressDiscriminatedFields));326static_assert( __builtin_is_replaceable(RelocatableAddressDiscriminatedFields));327static_assert( __builtin_is_replaceable(AddressDiscriminatedFieldInBaseClass));328static_assert(!__builtin_is_replaceable(NonAddressDiscriminatedVTablePtr));329static_assert(!__builtin_is_replaceable(NonAddressDiscriminatedVTablePtr2));330static_assert(!__builtin_is_replaceable(RelocatableNonAddressDiscriminatedVTablePtr));331static_assert(!__builtin_is_replaceable(RelocatableNonAddressDiscriminatedVTablePtr2));332static_assert(!__builtin_is_replaceable(AddressDiscriminatedVTablePtr));333static_assert(!__builtin_is_replaceable(RelocatableAddressDiscriminatedVTablePtr));334static_assert(!__builtin_is_replaceable(NoAddressDiscriminatedBaseClasses));335static_assert(!__builtin_is_replaceable(RelocatableNoAddressDiscriminatedBaseClasses));336static_assert(!__builtin_is_replaceable(AddressDiscriminatedPrimaryBase));337static_assert(!__builtin_is_replaceable(AddressDiscriminatedSecondaryBase));338static_assert(!__builtin_is_replaceable(RelocatableAddressDiscriminatedPrimaryBase));339static_assert(!__builtin_is_replaceable(RelocatableAddressDiscriminatedSecondaryBase));340static_assert(!__builtin_is_replaceable(EmbdeddedAddressDiscriminatedPolymorphicClass));341static_assert(!__builtin_is_replaceable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));342 343static_assert( __is_bitwise_cloneable(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);344static_assert( __is_bitwise_cloneable(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);345static_assert( __is_bitwise_cloneable(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);346static_assert( __is_bitwise_cloneable(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);347static_assert( __is_bitwise_cloneable(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);348static_assert( __is_bitwise_cloneable(NonAddressDiscriminatedVTablePtr));349static_assert( __is_bitwise_cloneable(NonAddressDiscriminatedVTablePtr2));350static_assert( __is_bitwise_cloneable(RelocatableNonAddressDiscriminatedVTablePtr));351static_assert( __is_bitwise_cloneable(RelocatableNonAddressDiscriminatedVTablePtr2));352static_assert( __is_bitwise_cloneable(AddressDiscriminatedVTablePtr) == !ADDR_DISC_ENABLED);353static_assert( __is_bitwise_cloneable(RelocatableAddressDiscriminatedVTablePtr) == !ADDR_DISC_ENABLED);354static_assert( __is_bitwise_cloneable(NoAddressDiscriminatedBaseClasses));355static_assert( __is_bitwise_cloneable(RelocatableNoAddressDiscriminatedBaseClasses));356static_assert( __is_bitwise_cloneable(AddressDiscriminatedPrimaryBase) == !ADDR_DISC_ENABLED);357static_assert( __is_bitwise_cloneable(AddressDiscriminatedSecondaryBase) == !ADDR_DISC_ENABLED);358static_assert( __is_bitwise_cloneable(RelocatableAddressDiscriminatedPrimaryBase) == !ADDR_DISC_ENABLED);359static_assert( __is_bitwise_cloneable(RelocatableAddressDiscriminatedSecondaryBase) == !ADDR_DISC_ENABLED);360static_assert( __is_bitwise_cloneable(EmbdeddedAddressDiscriminatedPolymorphicClass) == !ADDR_DISC_ENABLED);361static_assert( __is_bitwise_cloneable(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass) == !ADDR_DISC_ENABLED);362 363static_assert( __has_unique_object_representations(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);364static_assert( __has_unique_object_representations(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);365static_assert( __has_unique_object_representations(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);366static_assert( __has_unique_object_representations(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);367static_assert( __has_unique_object_representations(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);368static_assert(!__has_unique_object_representations(NonAddressDiscriminatedVTablePtr));369static_assert(!__has_unique_object_representations(NonAddressDiscriminatedVTablePtr2));370static_assert(!__has_unique_object_representations(RelocatableNonAddressDiscriminatedVTablePtr));371static_assert(!__has_unique_object_representations(RelocatableNonAddressDiscriminatedVTablePtr2));372static_assert(!__has_unique_object_representations(AddressDiscriminatedVTablePtr));373static_assert(!__has_unique_object_representations(RelocatableAddressDiscriminatedVTablePtr));374static_assert(!__has_unique_object_representations(NoAddressDiscriminatedBaseClasses));375static_assert(!__has_unique_object_representations(RelocatableNoAddressDiscriminatedBaseClasses));376static_assert(!__has_unique_object_representations(AddressDiscriminatedPrimaryBase));377static_assert(!__has_unique_object_representations(AddressDiscriminatedSecondaryBase));378static_assert(!__has_unique_object_representations(RelocatableAddressDiscriminatedPrimaryBase));379static_assert(!__has_unique_object_representations(RelocatableAddressDiscriminatedSecondaryBase));380static_assert(!__has_unique_object_representations(EmbdeddedAddressDiscriminatedPolymorphicClass));381static_assert(!__has_unique_object_representations(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));382 383#define ASSIGNABLE_WRAPPER(Type) __is_trivially_assignable(Type&, Type)384static_assert( ASSIGNABLE_WRAPPER(AddressDiscriminatedPtr) == !ADDR_DISC_ENABLED);385static_assert( ASSIGNABLE_WRAPPER(AddressDiscriminatedInt64) == !ADDR_DISC_ENABLED);386static_assert( ASSIGNABLE_WRAPPER(AddressDiscriminatedFields) == !ADDR_DISC_ENABLED);387static_assert( ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedFields) == !ADDR_DISC_ENABLED);388static_assert( ASSIGNABLE_WRAPPER(AddressDiscriminatedFieldInBaseClass) == !ADDR_DISC_ENABLED);389static_assert(!ASSIGNABLE_WRAPPER(NonAddressDiscriminatedVTablePtr));390static_assert(!ASSIGNABLE_WRAPPER(NonAddressDiscriminatedVTablePtr2));391static_assert(!ASSIGNABLE_WRAPPER(RelocatableNonAddressDiscriminatedVTablePtr));392static_assert(!ASSIGNABLE_WRAPPER(RelocatableNonAddressDiscriminatedVTablePtr2));393static_assert(!ASSIGNABLE_WRAPPER(AddressDiscriminatedVTablePtr));394static_assert(!ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedVTablePtr));395static_assert(!ASSIGNABLE_WRAPPER(NoAddressDiscriminatedBaseClasses));396static_assert(!ASSIGNABLE_WRAPPER(RelocatableNoAddressDiscriminatedBaseClasses));397static_assert(!ASSIGNABLE_WRAPPER(AddressDiscriminatedPrimaryBase));398static_assert(!ASSIGNABLE_WRAPPER(AddressDiscriminatedSecondaryBase));399static_assert(!ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedPrimaryBase));400static_assert(!ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedSecondaryBase));401static_assert(!ASSIGNABLE_WRAPPER(EmbdeddedAddressDiscriminatedPolymorphicClass));402static_assert(!ASSIGNABLE_WRAPPER(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));403 404namespace GH159505 {405  class A {406    virtual void f();407  };408 409  template <int N> struct B {410    class C : A {411      A a[N];412    } d;413  };414 415  template <int N> struct C {416    void *__ptrauth(1,1,1) ptr[N];417    static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(decltype(ptr)));418  };419  template <class T, bool isPtrauth> struct D {420    T ptr;421    static_assert(isPtrauth != __is_trivially_copyable(decltype(ptr)));422  };423 424 425  template <class T> using Ptr = T * __ptrauth(1,1,1);426  template <class T> void test() {427    static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(Ptr<T>));428  }429 430  auto f = test<int>;431  static_assert(!__is_trivially_copyable(B<1>));432  static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(C<1>));433 434 435  D<void *, false> d_void;436  D<void * __ptrauth(1,1,1), PTRAUTH_ENABLED> d_void_ptrauth;437}438