@@ -680,6 +680,10 @@ class Attr {
680680 bit PragmaAttributeSupport;
681681 // Set to true if this attribute accepts parameter pack expansion expressions.
682682 bit AcceptsExprPack = 0;
683+ // To support multiple enum parameters to an attribute without breaking
684+ // our existing general parsing we need to have a separate flag that
685+ // opts an attribute into strict parsing of attribute parameters
686+ bit StrictEnumParameters = 0;
683687 // Lists language options, one of which is required to be true for the
684688 // attribute to be applicable. If empty, no language options are required.
685689 list<LangOpt> LangOpts = [];
@@ -4546,6 +4550,31 @@ def NoRandomizeLayout : InheritableAttr {
45464550}
45474551def : MutualExclusions<[RandomizeLayout, NoRandomizeLayout]>;
45484552
4553+ def VTablePointerAuthentication : InheritableAttr {
4554+ let Spellings = [Clang<"ptrauth_vtable_pointer">];
4555+ let Subjects = SubjectList<[CXXRecord]>;
4556+ let Documentation = [Undocumented];
4557+ let StrictEnumParameters = 1;
4558+ let Args = [EnumArgument<"Key", "VPtrAuthKeyType", /*is_string=*/ true,
4559+ ["default_key", "no_authentication", "process_dependent",
4560+ "process_independent"],
4561+ ["DefaultKey", "NoKey", "ProcessDependent",
4562+ "ProcessIndependent"]>,
4563+ EnumArgument<"AddressDiscrimination", "AddressDiscriminationMode",
4564+ /*is_string=*/ true,
4565+ ["default_address_discrimination", "no_address_discrimination",
4566+ "address_discrimination"],
4567+ ["DefaultAddressDiscrimination", "NoAddressDiscrimination",
4568+ "AddressDiscrimination"]>,
4569+ EnumArgument<"ExtraDiscrimination", "ExtraDiscrimination",
4570+ /*is_string=*/ true,
4571+ ["default_extra_discrimination", "no_extra_discrimination",
4572+ "type_discrimination", "custom_discrimination"],
4573+ ["DefaultExtraDiscrimination", "NoExtraDiscrimination",
4574+ "TypeDiscrimination", "CustomDiscrimination"]>,
4575+ IntArgument<"CustomDiscriminationValue", 1>];
4576+ }
4577+
45494578def FunctionReturnThunks : InheritableAttr,
45504579 TargetSpecificAttr<TargetAnyX86> {
45514580 let Spellings = [GCC<"function_return">];
0 commit comments