@@ -3856,6 +3856,7 @@ def AssertCapability : InheritableAttr {
38563856 let ParseArgumentsAsUnevaluated = 1;
38573857 let InheritEvenIfAlreadyPresent = 1;
38583858 let Args = [VariadicExprArgument<"Args">];
3859+ let AcceptsExprPack = 1;
38593860 let Accessors = [Accessor<"isShared",
38603861 [Clang<"assert_shared_capability", 0>,
38613862 GNU<"assert_shared_lock">]>];
@@ -3873,6 +3874,7 @@ def AcquireCapability : InheritableAttr {
38733874 let ParseArgumentsAsUnevaluated = 1;
38743875 let InheritEvenIfAlreadyPresent = 1;
38753876 let Args = [VariadicExprArgument<"Args">];
3877+ let AcceptsExprPack = 1;
38763878 let Accessors = [Accessor<"isShared",
38773879 [Clang<"acquire_shared_capability", 0>,
38783880 GNU<"shared_lock_function">]>];
@@ -3890,6 +3892,7 @@ def TryAcquireCapability : InheritableAttr {
38903892 let ParseArgumentsAsUnevaluated = 1;
38913893 let InheritEvenIfAlreadyPresent = 1;
38923894 let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">];
3895+ let AcceptsExprPack = 1;
38933896 let Accessors = [Accessor<"isShared",
38943897 [Clang<"try_acquire_shared_capability", 0>,
38953898 GNU<"shared_trylock_function">]>];
@@ -3907,6 +3910,7 @@ def ReleaseCapability : InheritableAttr {
39073910 let ParseArgumentsAsUnevaluated = 1;
39083911 let InheritEvenIfAlreadyPresent = 1;
39093912 let Args = [VariadicExprArgument<"Args">];
3913+ let AcceptsExprPack = 1;
39103914 let Accessors = [Accessor<"isShared",
39113915 [Clang<"release_shared_capability", 0>]>,
39123916 Accessor<"isGeneric",
@@ -3921,6 +3925,7 @@ def RequiresCapability : InheritableAttr {
39213925 Clang<"requires_shared_capability", 0>,
39223926 Clang<"shared_locks_required", 0>];
39233927 let Args = [VariadicExprArgument<"Args">];
3928+ let AcceptsExprPack = 1;
39243929 let LateParsed = LateAttrParseStandard;
39253930 let TemplateDependent = 1;
39263931 let ParseArgumentsAsUnevaluated = 1;
@@ -3963,6 +3968,7 @@ def PtGuardedBy : InheritableAttr {
39633968def AcquiredAfter : InheritableAttr {
39643969 let Spellings = [GNU<"acquired_after">];
39653970 let Args = [VariadicExprArgument<"Args">];
3971+ let AcceptsExprPack = 1;
39663972 let LateParsed = LateAttrParseExperimentalExt;
39673973 let TemplateDependent = 1;
39683974 let ParseArgumentsAsUnevaluated = 1;
@@ -3974,6 +3980,7 @@ def AcquiredAfter : InheritableAttr {
39743980def AcquiredBefore : InheritableAttr {
39753981 let Spellings = [GNU<"acquired_before">];
39763982 let Args = [VariadicExprArgument<"Args">];
3983+ let AcceptsExprPack = 1;
39773984 let LateParsed = LateAttrParseExperimentalExt;
39783985 let TemplateDependent = 1;
39793986 let ParseArgumentsAsUnevaluated = 1;
@@ -3995,6 +4002,7 @@ def LockReturned : InheritableAttr {
39954002def LocksExcluded : InheritableAttr {
39964003 let Spellings = [GNU<"locks_excluded">];
39974004 let Args = [VariadicExprArgument<"Args">];
4005+ let AcceptsExprPack = 1;
39984006 let LateParsed = LateAttrParseStandard;
39994007 let TemplateDependent = 1;
40004008 let ParseArgumentsAsUnevaluated = 1;
@@ -4752,20 +4760,25 @@ def HLSLResourceBinding: InheritableAttr {
47524760
47534761 private:
47544762 RegisterType RegType;
4755- unsigned SlotNumber;
4763+ std::optional< unsigned> SlotNumber;
47564764 unsigned SpaceNumber;
47574765
47584766 public:
4759- void setBinding(RegisterType RT, unsigned SlotNum, unsigned SpaceNum) {
4767+ void setBinding(RegisterType RT, std::optional< unsigned> SlotNum, unsigned SpaceNum) {
47604768 RegType = RT;
47614769 SlotNumber = SlotNum;
47624770 SpaceNumber = SpaceNum;
47634771 }
4772+ bool isImplicit() const {
4773+ return !SlotNumber.has_value();
4774+ }
47644775 RegisterType getRegisterType() const {
4776+ assert(!isImplicit() && "binding does not have register slot");
47654777 return RegType;
47664778 }
47674779 unsigned getSlotNumber() const {
4768- return SlotNumber;
4780+ assert(!isImplicit() && "binding does not have register slot");
4781+ return SlotNumber.value();
47694782 }
47704783 unsigned getSpaceNumber() const {
47714784 return SpaceNumber;
0 commit comments