aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-10-28 02:16:22 +0000
committerTed Kremenek <kremenek@apple.com>2010-10-28 02:16:22 +0000
commited50a8a7a8b5fbb5d365b39c81ec389e19e4360e (patch)
tree6d950fa6af78a210b5b46b8bc8060afa44777b27
parentd14553554654a5dd8839159c42b94938c1122b00 (diff)
Don't warn about unamed bitfield ivars in the ObjCUnusedIvarsChecker. Fixes <rdar://problem/8481311>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117521 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Checker/ObjCUnusedIVarsChecker.cpp4
-rw-r--r--test/Analysis/unused-ivars.m14
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/Checker/ObjCUnusedIVarsChecker.cpp b/lib/Checker/ObjCUnusedIVarsChecker.cpp
index 2523cff9d8..edeba74ae8 100644
--- a/lib/Checker/ObjCUnusedIVarsChecker.cpp
+++ b/lib/Checker/ObjCUnusedIVarsChecker.cpp
@@ -113,9 +113,11 @@ void clang::CheckObjCUnusedIvar(const ObjCImplementationDecl *D,
// (a) aren't private
// (b) explicitly marked unused
// (c) are iboutlets
+ // (d) are unnamed bitfields
if (ID->getAccessControl() != ObjCIvarDecl::Private ||
ID->getAttr<UnusedAttr>() || ID->getAttr<IBOutletAttr>() ||
- ID->getAttr<IBOutletCollectionAttr>())
+ ID->getAttr<IBOutletCollectionAttr>() ||
+ ID->isUnnamedBitfield())
continue;
M[ID] = Unused;
diff --git a/test/Analysis/unused-ivars.m b/test/Analysis/unused-ivars.m
index 14c43a86c4..c88d14880b 100644
--- a/test/Analysis/unused-ivars.m
+++ b/test/Analysis/unused-ivars.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fblocks -analyze -analyzer-check-objc-unused-ivars %s -verify
+// RUN: %clang_cc1 -fobjc-nonfragile-abi2 -fblocks -analyze -analyzer-check-objc-unused-ivars %s -verify
//===--- BEGIN: Delta-debugging reduced headers. --------------------------===//
@@ -95,4 +95,16 @@ int radar_7254495(RDar7254495 *a) {
@implementation RDar7353683
@end
+//===----------------------------------------------------------------------===//
+// <rdar://problem/8481311> Unused bitfield ivars trigger cause weird
+// diagnostic: "Instance variable '' in class…"
+//===----------------------------------------------------------------------===//
+@interface RDar8481311 {
+@private
+ unsigned bitfield:1; // expected-warning {{Instance variable 'bitfield' in class 'RDar8481311' is never used}}
+}
+@end
+
+@implementation RDar8481311
+@end