]> granicus.if.org Git - clang/commitdiff
Minor tweaks in the transfer functions for pre- and post- ++/-- where
authorTed Kremenek <kremenek@apple.com>
Thu, 24 Jan 2008 19:00:57 +0000 (19:00 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 24 Jan 2008 19:00:57 +0000 (19:00 +0000)
we falsely constructed an APInt to represent the constant '1' instead of
using an APSInt (which has a sign).

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

Analysis/GRConstants.cpp

index 2d1ba56f7e194174c02caaba2db26d2a55bf6a21..35758c672e79ea9c42ba9e144f4a86bd0cb56d04 100644 (file)
@@ -829,9 +829,10 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
         RValue R1 = cast<RValue>(GetValue(St, L1));
 
         QualType T = U->getType();
-        llvm::APInt One(getContext()->getTypeSize(T,U->getLocStart()), 1);
-        RValue R2 = RValue::GetRValue(ValMgr, One);        
-
+        unsigned bits = getContext()->getTypeSize(T, U->getLocStart());
+        llvm::APSInt One(llvm::APInt(bits, 1), T->isUnsignedIntegerType());
+        RValue R2 = RValue::GetRValue(ValMgr, One);
+        
         RValue Result = R1.EvalAdd(ValMgr, R2);
         Nodify(Dst, U, N1, SetValue(SetValue(St, U, R1), L1, Result));
         break;
@@ -842,8 +843,9 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
         RValue R1 = cast<RValue>(GetValue(St, L1));
         
         QualType T = U->getType();
-        llvm::APInt One(getContext()->getTypeSize(T,U->getLocStart()), 1);
-        RValue R2 = RValue::GetRValue(ValMgr, One);        
+        unsigned bits = getContext()->getTypeSize(T, U->getLocStart());
+        llvm::APSInt One(llvm::APInt(bits, 1), T->isUnsignedIntegerType());
+        RValue R2 = RValue::GetRValue(ValMgr, One);
         
         RValue Result = R1.EvalSub(ValMgr, R2);
         Nodify(Dst, U, N1, SetValue(SetValue(St, U, R1), L1, Result));
@@ -855,7 +857,8 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
         RValue R1 = cast<RValue>(GetValue(St, L1));
         
         QualType T = U->getType();
-        llvm::APInt One(getContext()->getTypeSize(T,U->getLocStart()), 1);
+        unsigned bits = getContext()->getTypeSize(T, U->getLocStart());
+        llvm::APSInt One(llvm::APInt(bits, 1), T->isUnsignedIntegerType());
         RValue R2 = RValue::GetRValue(ValMgr, One);        
         
         RValue Result = R1.EvalAdd(ValMgr, R2);
@@ -868,8 +871,9 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
         RValue R1 = cast<RValue>(GetValue(St, L1));
         
         QualType T = U->getType();
-        llvm::APInt One(getContext()->getTypeSize(T,U->getLocStart()), 1);
-        RValue R2 = RValue::GetRValue(ValMgr, One);        
+        unsigned bits = getContext()->getTypeSize(T, U->getLocStart());
+        llvm::APSInt One(llvm::APInt(bits, 1), T->isUnsignedIntegerType());
+        RValue R2 = RValue::GetRValue(ValMgr, One);       
         
         RValue Result = R1.EvalSub(ValMgr, R2);
         Nodify(Dst, U, N1, SetValue(SetValue(St, U, Result), L1, Result));