[cfe-commits] r71182 - in /cfe/trunk: include/clang/Parse/AttributeList.h lib/Analysis/GRExprEngineInternalChecks.cpp lib/Parse/AttributeList.cpp lib/Sema/SemaDeclAttr.cpp test/Analysis/retain-release-gc-only.m test/Analysis/retain-release.m

Ted Kremenek kremenek at apple.com
Thu May 7 14:49:45 PDT 2009


Author: kremenek
Date: Thu May  7 16:49:45 2009
New Revision: 71182

URL: http://llvm.org/viewvc/llvm-project?rev=71182&view=rev
Log:
More attribute renaming:
- Rename 'ns_returns_owned' -> 'ns_returns_retained'.
- Rename 'cf_returns_owned' -> 'cf_returns_retained'.

Modified:
    cfe/trunk/include/clang/Parse/AttributeList.h
    cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp
    cfe/trunk/lib/Parse/AttributeList.cpp
    cfe/trunk/lib/Sema/SemaDeclAttr.cpp
    cfe/trunk/test/Analysis/retain-release-gc-only.m
    cfe/trunk/test/Analysis/retain-release.m

Modified: cfe/trunk/include/clang/Parse/AttributeList.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/AttributeList.h?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/AttributeList.h (original)
+++ cfe/trunk/include/clang/Parse/AttributeList.h Thu May  7 16:49:45 2009
@@ -78,11 +78,11 @@
     AT_objc_exception,
     AT_cf_releases,        // Clang-specific.
     AT_cf_retains,         // Clang-specific.
-    AT_cf_returns_owned,   // Clang-specific.
+    AT_cf_returns_retained,   // Clang-specific.
     AT_ns_autoreleases,    // Clang-specific.
     AT_ns_releases,        // Clang-specific.
     AT_ns_retains,         // Clang-specific.
-    AT_ns_returns_owned,   // Clang-specific.
+    AT_ns_returns_retained,   // Clang-specific.
     AT_objc_gc,
     AT_overloadable,       // Clang-specific.
     AT_packed,

Modified: cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp (original)
+++ cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp Thu May  7 16:49:45 2009
@@ -525,6 +525,65 @@
 //===----------------------------------------------------------------------===//
 
 namespace {
+#if 0
+class VISIBILITY_HIDDEN TrackValueBRVisitor : public BugReporterVisitor {
+  SVal V;
+  Stmt *S;
+  const MemRegion *R;
+public:
+  TrackValueBRVisitor(SVal v, Stmt *s) : V(v), S(s), R(0) {}
+  
+  PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState> *N,
+                                 const ExplodedNode<GRState> *PrevN,
+                                 BugReporterContext& BRC) {
+    
+    // Not at a expression?
+    if (!isa<PostStmt>(N->getLocation())) {
+      S = 0;
+      return NULL;
+    }
+    
+    if (S)
+      return VisitNodeExpr(N, PrevN, BRC);
+    else if (R)
+      return VisitNodeRegion(N, PrevN, BRC);
+    
+    return NULL;
+  }
+  
+  PathDiagnosticPiece* VisitNodeExpr(const ExplodedNode<GRState> *N,
+                                     const ExplodedNode<GRState> *PrevN,
+                                     BugReporterContext& BRC) {
+    
+    assert(S);
+    PostStmt P = cast<PostStmt>(N->getLocation());
+    Stmt *X = P.getStmt();
+    
+    // Generate the subexpression path.
+    llvm::SmallVector<Stmt*, 4> SubExprPath;
+    ParentMap &PM = BRC.getParentMap();
+    
+    for ( ; X && X != S ; X = X.getParent(X)) {
+      if (isa<ParenExpr>(X))
+        continue;
+      
+      SubExprPath.push_back(L);
+    }
+     
+    // Lost track?  (X is not a subexpression of S).
+    if (X != S) {
+      S = NULL;
+      return NULL;
+    }
+
+    // Now go down the subexpression path!
+    
+    
+    
+  }  
+};
+#endif
+  
 class VISIBILITY_HIDDEN TrackConstraintBRVisitor : public BugReporterVisitor {
   SVal Constraint;
   const bool Assumption;
@@ -533,8 +592,8 @@
   TrackConstraintBRVisitor(SVal constraint, bool assumption)
     : Constraint(constraint), Assumption(assumption), isSatisfied(false) {}
     
-  PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState>* N,
-                                 const ExplodedNode<GRState>* PrevN,
+  PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState> *N,
+                                 const ExplodedNode<GRState> *PrevN,
                                  BugReporterContext& BRC) {
     if (isSatisfied)
       return NULL;
@@ -624,7 +683,7 @@
   // base value that was dereferenced.
   // assert(!V.isUnknownOrUndef());
   
-  // For now just track when a symbolic value became null.
+  // Is it a symbolic value?
   if (loc::MemRegionVal *L = dyn_cast<loc::MemRegionVal>(&V)) {
     const SubRegion *R = cast<SubRegion>(L->getRegion());
     while (R && !isa<SymbolicRegion>(R)) {
@@ -634,8 +693,13 @@
     if (R) {
       assert(isa<SymbolicRegion>(R));
       registerTrackConstraint(BRC, loc::MemRegionVal(R), false);
+//      registerTrackValue(BRC, S, V, N);
     }
   }
+  
+  // Was it a hard integer?
+//  if (isa<nonloc::ConcreteInt>(V))
+//    registerTrackValue(BRC, S, V, N);  
 }
 
 //===----------------------------------------------------------------------===//

Modified: cfe/trunk/lib/Parse/AttributeList.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/AttributeList.cpp?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/AttributeList.cpp (original)
+++ cfe/trunk/lib/Parse/AttributeList.cpp Thu May  7 16:49:45 2009
@@ -131,10 +131,6 @@
     if (!memcmp(Str, "ext_vector_type", 15)) return AT_ext_vector_type;
     if (!memcmp(Str, "ns_autoreleases", 15)) return AT_ns_autoreleases;
     break;
-  case 16:
-    if (!memcmp(Str, "ns_returns_owned", 16)) return AT_ns_returns_owned;
-    if (!memcmp(Str, "cf_returns_owned", 16)) return AT_cf_returns_owned;
-    break;      
   case 17:
     if (!memcmp(Str, "transparent_union", 17)) return AT_transparent_union;
     if (!memcmp(Str, "analyzer_noreturn", 17)) return AT_analyzer_noreturn;
@@ -142,6 +138,10 @@
   case 18:
     if (!memcmp(Str, "warn_unused_result", 18)) return AT_warn_unused_result;
     break;
+  case 19:
+    if (!memcmp(Str, "ns_returns_retained", 19)) return AT_ns_returns_retained;
+    if (!memcmp(Str, "cf_returns_retained", 19)) return AT_cf_returns_retained;
+    break;            
   case 22:
     if (!memcmp(Str, "no_instrument_function", 22))
       return AT_no_instrument_function;

Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Thu May  7 16:49:45 2009
@@ -1557,10 +1557,10 @@
       default:
         assert(0 && "invalid ownership attribute");
         return;
-      case AttributeList::AT_cf_returns_owned:
-        name = "cf_returns_owned"; break;
-      case AttributeList::AT_ns_returns_owned:
-        name = "ns_returns_owned"; break;
+      case AttributeList::AT_cf_returns_retained:
+        name = "cf_returns_retained"; break;
+      case AttributeList::AT_ns_returns_retained:
+        name = "ns_returns_retained"; break;
     };
 
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) <<
@@ -1572,10 +1572,10 @@
     default:
       assert(0 && "invalid ownership attribute");
       return;
-    case AttributeList::AT_cf_returns_owned:
+    case AttributeList::AT_cf_returns_retained:
       d->addAttr(::new (S.Context) CFOwnershipReturnsAttr());
       return;
-    case AttributeList::AT_ns_returns_owned:
+    case AttributeList::AT_ns_returns_retained:
       d->addAttr(::new (S.Context) NSOwnershipReturnsAttr());
       return;
   };
@@ -1676,8 +1676,8 @@
   case AttributeList::AT_ns_releases:
   case AttributeList::AT_ns_retains:
       HandleNSOwnershipAttr(D, Attr, S, true); break;
-  case AttributeList::AT_ns_returns_owned:
-  case AttributeList::AT_cf_returns_owned:
+  case AttributeList::AT_ns_returns_retained:
+  case AttributeList::AT_cf_returns_retained:
     HandleNSOwnershipReturnsAttr(D, Attr, S); break;
 
   case AttributeList::AT_packed:      HandlePackedAttr    (D, Attr, S); break;

Modified: cfe/trunk/test/Analysis/retain-release-gc-only.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release-gc-only.m?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/retain-release-gc-only.m (original)
+++ cfe/trunk/test/Analysis/retain-release-gc-only.m Thu May  7 16:49:45 2009
@@ -129,8 +129,8 @@
 //===----------------------------------------------------------------------===//
 
 @interface TestOwnershipAttr : NSObject
-- (NSString*) returnsAnOwnedString __attribute__((ns_returns_owned));
-- (NSString*) returnsAnOwnedCFString  __attribute__((cf_returns_owned));
+- (NSString*) returnsAnOwnedString __attribute__((ns_returns_retained));
+- (NSString*) returnsAnOwnedCFString  __attribute__((cf_returns_retained));
 - (void) myRetain:(id)__attribute__((ns_retains))obj;
 - (void) myCFRetain:(id)__attribute__((cf_retains))obj;
 - (void) myRelease:(id)__attribute__((ns_releases))obj;

Modified: cfe/trunk/test/Analysis/retain-release.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.m?rev=71182&r1=71181&r2=71182&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/retain-release.m (original)
+++ cfe/trunk/test/Analysis/retain-release.m Thu May  7 16:49:45 2009
@@ -431,8 +431,8 @@
 //===----------------------------------------------------------------------===//
 
 @interface TestOwnershipAttr : NSObject
-- (NSString*) returnsAnOwnedString  __attribute__((ns_returns_owned));
-- (NSString*) returnsAnOwnedCFString  __attribute__((cf_returns_owned));
+- (NSString*) returnsAnOwnedString  __attribute__((ns_returns_retained));
+- (NSString*) returnsAnOwnedCFString  __attribute__((cf_returns_retained));
 - (void) myRetain:(id)__attribute__((ns_retains))obj;
 - (void) myCFRetain:(id)__attribute__((cf_retains))obj;
 - (void) myRelease:(id)__attribute__((ns_releases))obj;
@@ -445,7 +445,7 @@
 
 @interface TestAttrHelper : NSObject
 - (NSString*) createString:(TestOwnershipAttr*)X;
-- (NSString*) createStringAttr:(TestOwnershipAttr*)X __attribute__((ns_returns_owned));
+- (NSString*) createStringAttr:(TestOwnershipAttr*)X __attribute__((ns_returns_retained));
 @end
 
 @implementation TestAttrHelper
@@ -465,7 +465,7 @@
   NSString *str = [X returnsAnOwnedCFString]; // expected-warning{{leak}}
 }
 
-__attribute__((ns_returns_owned))
+__attribute__((ns_returns_retained))
 NSString* test_attr_1c(TestOwnershipAttr *X) {
   NSString *str = [X returnsAnOwnedString]; // no-warning
   return str;
@@ -473,7 +473,7 @@
 
 void test_attr_1d_helper(NSString* str __attribute__((ns_retains)));
 
-__attribute__((ns_returns_owned))
+__attribute__((ns_returns_retained))
 NSString* test_attr_1d(TestOwnershipAttr *X) {
   NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}}
   test_attr_1d_helper(str);





More information about the cfe-commits mailing list