[cfe-commits] r164990 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp test/SemaObjC/nonarc-weak.m

David Blaikie dblaikie at gmail.com
Tue Oct 2 12:02:26 PDT 2012


On Mon, Oct 1, 2012 at 10:36 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Tue Oct  2 00:36:02 2012
> New Revision: 164990
>
> URL: http://llvm.org/viewvc/llvm-project?rev=164990&view=rev
> Log:
> Tweak diagnostic text to indicate that __weak on a local variable is only allowed
> for ARC.  Fixes <rdar://problem/12407705>
>
> Added:
>     cfe/trunk/test/SemaObjC/nonarc-weak.m
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>     cfe/trunk/lib/Sema/SemaDecl.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=164990&r1=164989&r2=164990&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue Oct  2 00:36:02 2012
> @@ -1744,7 +1744,8 @@
>    "__attribute ((NSObject)) may be put on a typedef only, "
>    "attribute is ignored">, InGroup<NSobjectAttribute>;
>  def warn_attribute_weak_on_local : Warning<
> -  "__weak attribute cannot be specified on an automatic variable">,
> +  "__weak attribute cannot be specified on an automatic variable when ARC "
> +  "is not enabled">,
>    InGroup<IgnoredAttributes>;
>  def warn_weak_identifier_undeclared : Warning<
>    "weak identifier %0 never declared">;
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=164990&r1=164989&r2=164990&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Oct  2 00:36:02 2012
> @@ -4578,8 +4578,10 @@
>        && !NewVD->hasAttr<BlocksAttr>()) {
>      if (getLangOpts().getGC() != LangOptions::NonGC)
>        Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);
> -    else
> +    else {
> +      assert(!getLangOpts().ObjCAutoRefCount);
>        Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
> +    }
>    }
>
>    bool isVM = T->isVariablyModifiedType();
>
> Added: cfe/trunk/test/SemaObjC/nonarc-weak.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/nonarc-weak.m?rev=164990&view=auto
> ==============================================================================
> --- cfe/trunk/test/SemaObjC/nonarc-weak.m (added)
> +++ cfe/trunk/test/SemaObjC/nonarc-weak.m Tue Oct  2 00:36:02 2012
> @@ -0,0 +1,16 @@
> +// RUN: %clang -fsyntax-only -Wunused-function %s > %t.nonarc 2>&1
> +// RUN: %clang -fsyntax-only -Wunused-function -fobjc-arc %s > %t.arc 2>&1
> +// RUN: FileCheck -input-file=%t.nonarc %s
> +// RUN: FileCheck -input-file=%t.arc -check-prefix=ARC %s

Is there a reason these are FileCheck rather than -verify tests?

> +
> +static void bar() {} // Intentionally unused.
> +
> +void foo(id self) {
> +  __weak id weakSelf = self;
> +}
> +
> +// CHECK: 9:13: warning: __weak attribute cannot be specified on an automatic variable when ARC is not enabled
> +// CHECK: 6:13: warning: unused function 'bar'
> +// CHECK: 2 warnings generated
> +// ARC: 6:13: warning: unused function 'bar'
> +// ARC: 1 warning generated
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list