]> granicus.if.org Git - clang/commitdiff
[analyzer] Fix a regression in ObjCUnusedIVars checker.
authorAnna Zaks <ganna@apple.com>
Tue, 15 May 2012 22:31:56 +0000 (22:31 +0000)
committerAnna Zaks <ganna@apple.com>
Tue, 15 May 2012 22:31:56 +0000 (22:31 +0000)
We can no longer rely on children iterator to visit all the AST
tree children of an expression (OpaqueValueExpr has no children).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156870 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp
test/Analysis/unused-ivars.m

index ea6f8e109b61fa546f462655f6755b8994aec2c0..8792144ddef9bb928b3234a5b102010ff2c64a00 100644 (file)
@@ -47,6 +47,15 @@ static void Scan(IvarUsageMap& M, const Stmt *S) {
     return;
   }
 
+  if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(S))
+    for (PseudoObjectExpr::const_semantics_iterator
+        i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
+      const Expr *sub = *i;
+      if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(sub))
+        sub = OVE->getSourceExpr();
+      Scan(M, sub);
+    }
+
   for (Stmt::const_child_iterator I=S->child_begin(),E=S->child_end(); I!=E;++I)
     Scan(M, *I);
 }
index 894184078039af0b58ddba89a4e01901a78c27c4..f04132ba45704cc67f8dec3a1ff564bcf3a70b2f 100644 (file)
@@ -108,3 +108,24 @@ int radar_7254495(RDar7254495 *a) {
 
 @implementation RDar8481311
 @end
+
+@class NSString;
+@interface Radar11059352_1 {
+@private
+    NSString *_pathString;
+}
+@property (readonly, strong) NSString *pathString;
+@end
+
+@interface Radar11059352 {
+@private
+Radar11059352_1 *_workspacePath;
+}
+@end
+
+@implementation Radar11059352
+
+- (void)useWorkspace {
+    NSString *workspacePathString = _workspacePath.pathString;
+}
+@end
\ No newline at end of file