This patch cleans up a fixme in the trylock parsing by adding a separate arg in Attr.td for the first (required) argument.
Cheers, Caitlin
From 3311a51a1222d536e374c7db1e0e86be946611ca Mon Sep 17 00:00:00 2001 From: Caitlin Sadowski <[email protected]> Date: Mon, 12 Sep 2011 17:21:31 -0700 Subject: [PATCH] Thread safety: adding support for Trylocks --- include/clang/Basic/Attr.td | 8 ++++++-- lib/Sema/SemaDeclAttr.cpp | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 9289bd2..130beb8 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -601,15 +601,19 @@ def SharedLockFunction : InheritableAttr { let LateParsed = 1; } +// The first argument is an integer or boolean value specifying the return value +// of a successful lock acquisition. def ExclusiveTrylockFunction : InheritableAttr { let Spellings = ["exclusive_trylock_function"]; - let Args = [VariadicExprArgument<"Args">]; + let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">]; let LateParsed = 1; } +// The first argument is an integer or boolean value specifying the return value +// of a successful lock acquisition. def SharedTrylockFunction : InheritableAttr { let Spellings = ["shared_trylock_function"]; - let Args = [VariadicExprArgument<"Args">]; + let Args = [ExprArgument<"SuccessValue">, VariadicExprArgument<"Args">]; let LateParsed = 1; } diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 2f2e280..8ad36f4 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -540,22 +540,23 @@ static void handleTrylockFunAttr(Sema &S, Decl *D, const AttributeList &Attr, } SmallVector<Expr*, 2> Args; - Args.push_back(Attr.getArg(0)); //FIXME // check that all arguments are lockable objects if (!checkAttrArgsAreLockableObjs(S, D, Attr, Args, 1)) return; unsigned Size = Args.size(); - assert(Size == Attr.getNumArgs()); Expr **StartArg = Size == 0 ? 0 : &Args[0]; if (exclusive) D->addAttr(::new (S.Context) ExclusiveTrylockFunctionAttr(Attr.getLoc(), S.Context, + Attr.getArg(0), StartArg, Size)); else D->addAttr(::new (S.Context) SharedTrylockFunctionAttr(Attr.getLoc(), - S.Context, StartArg, + S.Context, + Attr.getArg(0), + StartArg, Size)); } -- 1.7.3.1
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
