[cfe-commits] r155357 - in /cfe/trunk: lib/Sema/SemaDeclAttr.cpp test/SemaCXX/warn-thread-safety-parsing.cpp

Chandler Carruth chandlerc at google.com
Mon Apr 23 09:50:27 PDT 2012


On Mon, Apr 23, 2012 at 9:45 AM, DeLesley Hutchins <delesley at google.com>wrote:

> Author: delesley
> Date: Mon Apr 23 11:45:01 2012
> New Revision: 155357
>
> URL: http://llvm.org/viewvc/llvm-project?rev=155357&view=rev
> Log:
> Thread-safety analysis: support new "pointer to member" syntax for
> existentially quantified lock expressions.
>

Come again? ;]

Also, should this new syntax also get new documentation?


>
> Modified:
>    cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>    cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=155357&r1=155356&r2=155357&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Mon Apr 23 11:45:01 2012
> @@ -313,7 +313,11 @@
>       continue;
>     }
>
> -    if (isa<StringLiteral>(ArgExp)) {
> +    if (StringLiteral *StrLit = dyn_cast<StringLiteral>(ArgExp)) {
> +      // Ignore empty strings without warnings
>

This seems an unrelated change, was it intentional? Test case?


> +      if (StrLit->getLength() == 0)
> +        continue;
> +
>       // We allow constant strings to be used as a placeholder for
> expressions
>       // that are not valid C++ syntax, but warn that they are ignored.
>       S.Diag(Attr.getLoc(), diag::warn_thread_attribute_ignored) <<
> @@ -323,6 +327,14 @@
>
>     QualType ArgTy = ArgExp->getType();
>
> +    // A pointer to member expression of the form  &MyClass::mu is treated
> +    // specially -- we need to look at the type of the member.
> +    if (UnaryOperator *UOp = dyn_cast<UnaryOperator>(ArgExp))
> +      if (UOp->getOpcode() == UO_AddrOf)
> +        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(UOp->getSubExpr()))
> +          if (DRE->getDecl()->isCXXInstanceMember())
> +            ArgTy = DRE->getDecl()->getType();
> +
>     // First see if we can just cast to record type, or point to record
> type.
>     const RecordType *RT = getRecordType(ArgTy);
>
>
> Modified: cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp?rev=155357&r1=155356&r2=155357&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp (original)
> +++ cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp Mon Apr 23
> 11:45:01 2012
> @@ -1341,5 +1341,20 @@
>
>  }
>
> +namespace PointerToMemberTest {
> +
> +class Graph {
> +public:
> +  Mu mu_;
> +};
> +
> +class Node {
> +public:
> +  void foo() EXCLUSIVE_LOCKS_REQUIRED(&Graph::mu_);
> +  int a GUARDED_BY(&Graph::mu_);
> +};
> +
> +}
> +
>  } // end namespace TestMultiDecl
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120423/8350cde7/attachment.html>


More information about the cfe-commits mailing list