]> granicus.if.org Git - clang/commitdiff
Thread safety: cleaning up FIXME for trylocks
authorCaitlin Sadowski <supertri@google.com>
Thu, 15 Sep 2011 17:50:19 +0000 (17:50 +0000)
committerCaitlin Sadowski <supertri@google.com>
Thu, 15 Sep 2011 17:50:19 +0000 (17:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139805 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
lib/Sema/SemaDeclAttr.cpp

index f61ae7f15db8061f757ab01d05d255d35bd83dc0..4d9aa5b9a3b274ea953caf72c99130fb2a01cfc3 100644 (file)
@@ -602,15 +602,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;
 }
 
index a887ce8ac356aff1a4a2370959efd968750d44b0..3deab0d6714b28c9a9a1cf51c2d72127a65a64a8 100644 (file)
@@ -540,23 +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.getRange(),
                                                               S.Context,
+                                                              Attr.getArg(0),
                                                               StartArg, Size));
   else
     D->addAttr(::new (S.Context) SharedTrylockFunctionAttr(Attr.getRange(),
-                                                           S.Context, StartArg,
-                                                           Size));
+                                                           S.Context,
+                                                           Attr.getArg(0),
+                                                           StartArg, Size));
 }
 
 static void handleLocksRequiredAttr(Sema &S, Decl *D, const AttributeList &Attr,