]> granicus.if.org Git - clang/commitdiff
Update typestate logic to support GC-mode.
authorTed Kremenek <kremenek@apple.com>
Tue, 29 Apr 2008 05:44:10 +0000 (05:44 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 29 Apr 2008 05:44:10 +0000 (05:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50396 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFRefCount.cpp

index 55753f316860c5c81deb7d915bd596c8a58ae911..9ed4f1db2934115c156ae325db922e9d48d11680 100644 (file)
@@ -1288,7 +1288,7 @@ CFRefCount::RefBindings CFRefCount::Update(RefBindings B, SymbolID sym,
       assert (false && "Unhandled CFRef transition.");
       
     case DoNothing:
-      if (V.getKind() == RefVal::Released) {
+      if (!GCEnabled && V.getKind() == RefVal::Released) {
         V = RefVal::makeUseAfterRelease();        
         hasErr = V.getKind();
         break;
@@ -1310,8 +1310,13 @@ CFRefCount::RefBindings CFRefCount::Update(RefBindings B, SymbolID sym,
           break;
           
         case RefVal::Released:
-          V = RefVal::makeUseAfterRelease();
-          hasErr = V.getKind();
+          if (GCEnabled)
+            V = RefVal::makeOwned();
+          else {          
+            V = RefVal::makeUseAfterRelease();
+            hasErr = V.getKind();
+          }
+          
           break;
       }