def GuardedVar : InheritableAttr {
let Spellings = [GNU<"guarded_var">];
+ let Subjects = [Field, Var];
}
def PtGuardedVar : InheritableAttr {
let Spellings = [GNU<"pt_guarded_var">];
+ let Subjects = [Field, Var];
}
def Lockable : InheritableAttr {
let Spellings = [GNU<"lockable">];
+ let Subjects = [Record];
}
def ScopedLockable : InheritableAttr {
let Spellings = [GNU<"scoped_lockable">];
+ let Subjects = [Record];
}
def NoThreadSafetyAnalysis : InheritableAttr {
let Spellings = [GNU<"no_thread_safety_analysis">];
+ let Subjects = [Function, FunctionTemplate];
}
def GuardedBy : InheritableAttr {
let Args = [ExprArgument<"Arg">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Field, Var];
}
def PtGuardedBy : InheritableAttr {
let Args = [ExprArgument<"Arg">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Field, Var];
}
def AcquiredAfter : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Field, Var];
}
def AcquiredBefore : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Field, Var];
}
def ExclusiveLockFunction : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def SharedLockFunction : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def AssertExclusiveLock : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def AssertSharedLock : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
// The first argument is an integer or boolean value specifying the return value
let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
// The first argument is an integer or boolean value specifying the return value
let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def UnlockFunction : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def LockReturned : InheritableAttr {
let Args = [ExprArgument<"Arg">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def LocksExcluded : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def ExclusiveLocksRequired : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
def SharedLocksRequired : InheritableAttr {
let Args = [VariadicExprArgument<"Args">];
let LateParsed = 1;
let TemplateDependent = 1;
+ let Subjects = [Function, FunctionTemplate];
}
// C/C++ consumed attributes.