static void checkForLockableRecord(Sema &S, Decl *D, const AttributeList &Attr,
QualType Ty) {
const RecordType *RT = getRecordType(Ty);
-
+
// Warn if could not get record type for this argument.
if (!RT) {
S.Diag(Attr.getLoc(), diag::warn_thread_attribute_argument_not_class)
return;
}
- // Don't check for lockable if the class hasn't been defined yet.
+ // Don't check for lockable if the class hasn't been defined yet.
if (RT->isIncompleteType())
return;
ThreadExpectedClassOrStruct
};
-static bool checkGuardedVarAttrCommon(Sema &S, Decl *D,
+static bool checkGuardedVarAttrCommon(Sema &S, Decl *D,
const AttributeList &Attr) {
assert(!Attr.isInvalid());
static void handleGuardedVarAttr(Sema &S, Decl *D, const AttributeList &Attr) {
if (!checkGuardedVarAttrCommon(S, D, Attr))
return;
-
+
D->addAttr(::new (S.Context) GuardedVarAttr(Attr.getRange(), S.Context));
}
-static void handlePtGuardedVarAttr(Sema &S, Decl *D,
+static void handlePtGuardedVarAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
if (!checkGuardedVarAttrCommon(S, D, Attr))
return;
D->addAttr(::new (S.Context) PtGuardedVarAttr(Attr.getRange(), S.Context));
}
-static bool checkGuardedByAttrCommon(Sema &S, Decl *D,
- const AttributeList &Attr,
+static bool checkGuardedByAttrCommon(Sema &S, Decl *D,
+ const AttributeList &Attr,
Expr* &Arg) {
assert(!Attr.isInvalid());
unsigned Size = Args.size();
if (Size != 1)
return false;
-
+
Arg = Args[0];
return true;
D->addAttr(::new (S.Context) GuardedByAttr(Attr.getRange(), S.Context, Arg));
}
-static void handlePtGuardedByAttr(Sema &S, Decl *D,
+static void handlePtGuardedByAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
Expr *Arg = 0;
if (!checkGuardedByAttrCommon(S, D, Attr, Arg))
S.Context, Arg));
}
-static bool checkLockableAttrCommon(Sema &S, Decl *D,
+static bool checkLockableAttrCommon(Sema &S, Decl *D,
const AttributeList &Attr) {
assert(!Attr.isInvalid());
D->addAttr(::new (S.Context) LockableAttr(Attr.getRange(), S.Context));
}
-static void handleScopedLockableAttr(Sema &S, Decl *D,
+static void handleScopedLockableAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
if (!checkLockableAttrCommon(S, D, Attr))
return;
S.Context));
}
-static bool checkAcquireOrderAttrCommon(Sema &S, Decl *D,
- const AttributeList &Attr,
+static bool checkAcquireOrderAttrCommon(Sema &S, Decl *D,
+ const AttributeList &Attr,
SmallVector<Expr*, 1> &Args) {
assert(!Attr.isInvalid());
checkAttrArgsAreLockableObjs(S, D, Attr, Args);
if (Args.size() == 0)
return false;
-
+
return true;
}
-static void handleAcquiredAfterAttr(Sema &S, Decl *D,
+static void handleAcquiredAfterAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkAcquireOrderAttrCommon(S, D, Attr, Args))
StartArg, Args.size()));
}
-static void handleAcquiredBeforeAttr(Sema &S, Decl *D,
+static void handleAcquiredBeforeAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkAcquireOrderAttrCommon(S, D, Attr, Args))
StartArg, Args.size()));
}
-static bool checkLockFunAttrCommon(Sema &S, Decl *D,
- const AttributeList &Attr,
+static bool checkLockFunAttrCommon(Sema &S, Decl *D,
+ const AttributeList &Attr,
SmallVector<Expr*, 1> &Args) {
assert(!Attr.isInvalid());
return true;
}
-static void handleSharedLockFunctionAttr(Sema &S, Decl *D,
+static void handleSharedLockFunctionAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkLockFunAttrCommon(S, D, Attr, Args))
unsigned Size = Args.size();
Expr **StartArg = Size == 0 ? 0 : &Args[0];
D->addAttr(::new (S.Context) SharedLockFunctionAttr(Attr.getRange(),
- S.Context,
+ S.Context,
StartArg, Size));
}
-static void handleExclusiveLockFunctionAttr(Sema &S, Decl *D,
+static void handleExclusiveLockFunctionAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkLockFunAttrCommon(S, D, Attr, Args))
unsigned Size = Args.size();
Expr **StartArg = Size == 0 ? 0 : &Args[0];
D->addAttr(::new (S.Context) ExclusiveLockFunctionAttr(Attr.getRange(),
- S.Context,
+ S.Context,
StartArg, Size));
}
-static bool checkTryLockFunAttrCommon(Sema &S, Decl *D,
- const AttributeList &Attr,
+static bool checkTryLockFunAttrCommon(Sema &S, Decl *D,
+ const AttributeList &Attr,
SmallVector<Expr*, 2> &Args) {
assert(!Attr.isInvalid());
return true;
}
-static void handleSharedTrylockFunctionAttr(Sema &S, Decl *D,
+static void handleSharedTrylockFunctionAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 2> Args;
if (!checkTryLockFunAttrCommon(S, D, Attr, Args))
unsigned Size = Args.size();
Expr **StartArg = Size == 0 ? 0 : &Args[0];
D->addAttr(::new (S.Context) SharedTrylockFunctionAttr(Attr.getRange(),
- S.Context,
- Attr.getArg(0),
+ S.Context,
+ Attr.getArg(0),
StartArg, Size));
}
-static void handleExclusiveTrylockFunctionAttr(Sema &S, Decl *D,
+static void handleExclusiveTrylockFunctionAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 2> Args;
if (!checkTryLockFunAttrCommon(S, D, Attr, Args))
unsigned Size = Args.size();
Expr **StartArg = Size == 0 ? 0 : &Args[0];
D->addAttr(::new (S.Context) ExclusiveTrylockFunctionAttr(Attr.getRange(),
- S.Context,
- Attr.getArg(0),
+ S.Context,
+ Attr.getArg(0),
StartArg, Size));
}
-static bool checkLocksRequiredCommon(Sema &S, Decl *D,
- const AttributeList &Attr,
+static bool checkLocksRequiredCommon(Sema &S, Decl *D,
+ const AttributeList &Attr,
SmallVector<Expr*, 1> &Args) {
assert(!Attr.isInvalid());
checkAttrArgsAreLockableObjs(S, D, Attr, Args);
if (Args.size() == 0)
return false;
-
+
return true;
}
-static void handleExclusiveLocksRequiredAttr(Sema &S, Decl *D,
+static void handleExclusiveLocksRequiredAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkLocksRequiredCommon(S, D, Attr, Args))
Expr **StartArg = &Args[0];
D->addAttr(::new (S.Context) ExclusiveLocksRequiredAttr(Attr.getRange(),
- S.Context,
- StartArg,
+ S.Context,
+ StartArg,
Args.size()));
}
-static void handleSharedLocksRequiredAttr(Sema &S, Decl *D,
+static void handleSharedLocksRequiredAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
SmallVector<Expr*, 1> Args;
if (!checkLocksRequiredCommon(S, D, Attr, Args))
Expr **StartArg = &Args[0];
D->addAttr(::new (S.Context) SharedLocksRequiredAttr(Attr.getRange(),
- S.Context,
- StartArg,
+ S.Context,
+ StartArg,
Args.size()));
}
SourceLocation TemplateKWLoc;
UnqualifiedId id;
id.setIdentifier(Attr.getParameterName(), Attr.getLoc());
-
+
ExprResult Size = S.ActOnIdExpression(scope, SS, TemplateKWLoc, id,
false, false);
if (Size.isInvalid())
return;
-
+
sizeExpr = Size.get();
} else {
// check the attribute arguments.