]> granicus.if.org Git - clang/commitdiff
Added transfer function support for unary '&' and '*', providing basic
authorTed Kremenek <kremenek@apple.com>
Thu, 31 Jan 2008 02:35:41 +0000 (02:35 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 31 Jan 2008 02:35:41 +0000 (02:35 +0000)
(local) aliasing support.

Modified ExplodedGraph pretty-printer (for GRConstants) to also print out the
pointer value of the state associated with a node.  This way one can easily
see that two states are identical.

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

Analysis/GRConstants.cpp

index b7d068a118719a6497e19b04da383305fb3d27ef..d6b078d26c1bb9c12ae706a868b2ac1f78f30172 100644 (file)
@@ -1,5 +1,5 @@
 //===-- GRConstants.cpp - Simple, Path-Sens. Constant Prop. ------*- C++ -*-==//
-//   
+//
 //                     The LLValM Compiler Infrastructure
 //
 // This file is distributed under the University of Illinois Open Source
@@ -733,7 +733,8 @@ void LValue::print(std::ostream& Out) const {
       break;
       
     case LValueDeclKind:
-      Out << cast<LValueDecl>(this)->getDecl()->getIdentifier();
+      Out << '&' 
+          << cast<LValueDecl>(this)->getDecl()->getIdentifier()->getName();
       break;
       
     default:
@@ -1277,6 +1278,18 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
         break;
       }
         
+      case UnaryOperator::AddrOf: {
+        const LValue& L1 = GetLValue(St, U->getSubExpr());
+        Nodify(Dst, U, N1, SetValue(St, U, L1));
+        break;
+      }
+        
+      case UnaryOperator::Deref: {
+        const LValue& L1 = GetLValue(St, U->getSubExpr());
+        Nodify(Dst, U, N1, SetValue(St, U, GetValue(St, L1)));
+        break;
+      }
+        
       default: ;
         assert (false && "Not implemented.");
     }    
@@ -1608,7 +1621,7 @@ struct VISIBILITY_HIDDEN DOTGraphTraits<GRConstants::NodeTy*> :
       }
     }
     
-    Out << "\\|";
+    Out << "\\|StateID: " << (void*) N->getState().getRoot() << "\\|";
     
     PrintKind(Out, N->getState(), ValueKey::IsDecl, true);
     PrintKind(Out, N->getState(), ValueKey::IsBlkExpr);