@@ -4896,6 +4896,7 @@ def AssertCapability : InheritableAttr {
48964896 let ParseArgumentsAsUnevaluated = 1;
48974897 let InheritEvenIfAlreadyPresent = 1;
48984898 let Args = [VariadicExprArgument<"Args">];
4899+ let AcceptsExprPack = 1;
48994900 let Accessors = [Accessor<"isShared",
49004901 [Clang<"assert_shared_capability", 0>,
49014902 GNU<"assert_shared_lock">]>];
@@ -4913,6 +4914,7 @@ def AcquireCapability : InheritableAttr {
49134914 let ParseArgumentsAsUnevaluated = 1;
49144915 let InheritEvenIfAlreadyPresent = 1;
49154916 let Args = [VariadicExprArgument<"Args">];
4917+ let AcceptsExprPack = 1;
49164918 let Accessors = [Accessor<"isShared",
49174919 [Clang<"acquire_shared_capability", 0>,
49184920 GNU<"shared_lock_function">]>];
@@ -4930,6 +4932,7 @@ def TryAcquireCapability : InheritableAttr {
49304932 let ParseArgumentsAsUnevaluated = 1;
49314933 let InheritEvenIfAlreadyPresent = 1;
49324934 let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">];
4935+ let AcceptsExprPack = 1;
49334936 let Accessors = [Accessor<"isShared",
49344937 [Clang<"try_acquire_shared_capability", 0>,
49354938 GNU<"shared_trylock_function">]>];
@@ -4947,6 +4950,7 @@ def ReleaseCapability : InheritableAttr {
49474950 let ParseArgumentsAsUnevaluated = 1;
49484951 let InheritEvenIfAlreadyPresent = 1;
49494952 let Args = [VariadicExprArgument<"Args">];
4953+ let AcceptsExprPack = 1;
49504954 let Accessors = [Accessor<"isShared",
49514955 [Clang<"release_shared_capability", 0>]>,
49524956 Accessor<"isGeneric",
@@ -4961,6 +4965,7 @@ def RequiresCapability : InheritableAttr {
49614965 Clang<"requires_shared_capability", 0>,
49624966 Clang<"shared_locks_required", 0>];
49634967 let Args = [VariadicExprArgument<"Args">];
4968+ let AcceptsExprPack = 1;
49644969 let LateParsed = LateAttrParseStandard;
49654970 let TemplateDependent = 1;
49664971 let ParseArgumentsAsUnevaluated = 1;
@@ -5003,6 +5008,7 @@ def PtGuardedBy : InheritableAttr {
50035008def AcquiredAfter : InheritableAttr {
50045009 let Spellings = [GNU<"acquired_after">];
50055010 let Args = [VariadicExprArgument<"Args">];
5011+ let AcceptsExprPack = 1;
50065012 let LateParsed = LateAttrParseExperimentalExt;
50075013 let TemplateDependent = 1;
50085014 let ParseArgumentsAsUnevaluated = 1;
@@ -5014,6 +5020,7 @@ def AcquiredAfter : InheritableAttr {
50145020def AcquiredBefore : InheritableAttr {
50155021 let Spellings = [GNU<"acquired_before">];
50165022 let Args = [VariadicExprArgument<"Args">];
5023+ let AcceptsExprPack = 1;
50175024 let LateParsed = LateAttrParseExperimentalExt;
50185025 let TemplateDependent = 1;
50195026 let ParseArgumentsAsUnevaluated = 1;
@@ -5035,6 +5042,7 @@ def LockReturned : InheritableAttr {
50355042def LocksExcluded : InheritableAttr {
50365043 let Spellings = [GNU<"locks_excluded">];
50375044 let Args = [VariadicExprArgument<"Args">];
5045+ let AcceptsExprPack = 1;
50385046 let LateParsed = LateAttrParseStandard;
50395047 let TemplateDependent = 1;
50405048 let ParseArgumentsAsUnevaluated = 1;
@@ -5792,20 +5800,25 @@ def HLSLResourceBinding: InheritableAttr {
57925800
57935801 private:
57945802 RegisterType RegType;
5795- unsigned SlotNumber;
5803+ std::optional< unsigned> SlotNumber;
57965804 unsigned SpaceNumber;
57975805
57985806 public:
5799- void setBinding(RegisterType RT, unsigned SlotNum, unsigned SpaceNum) {
5807+ void setBinding(RegisterType RT, std::optional< unsigned> SlotNum, unsigned SpaceNum) {
58005808 RegType = RT;
58015809 SlotNumber = SlotNum;
58025810 SpaceNumber = SpaceNum;
58035811 }
5812+ bool isImplicit() const {
5813+ return !SlotNumber.has_value();
5814+ }
58045815 RegisterType getRegisterType() const {
5816+ assert(!isImplicit() && "binding does not have register slot");
58055817 return RegType;
58065818 }
58075819 unsigned getSlotNumber() const {
5808- return SlotNumber;
5820+ assert(!isImplicit() && "binding does not have register slot");
5821+ return SlotNumber.value();
58095822 }
58105823 unsigned getSpaceNumber() const {
58115824 return SpaceNumber;
@@ -6064,3 +6077,9 @@ def OpenACCRoutineDecl :InheritableAttr {
60646077 void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const;
60656078 }];
60666079}
6080+
6081+ def NonString : InheritableAttr {
6082+ let Spellings = [GCC<"nonstring">];
6083+ let Subjects = SubjectList<[Var, Field]>;
6084+ let Documentation = [NonStringDocs];
6085+ }
0 commit comments