[cfe-commits] r164990 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp test/SemaObjC/nonarc-weak.m
Ted Kremenek
kremenek at apple.com
Mon Oct 1 22:36:02 PDT 2012
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
+
+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
More information about the cfe-commits
mailing list