]> granicus.if.org Git - clang/commitdiff
Fix pr6035.
authorZhongxing Xu <xuzhongxing@gmail.com>
Thu, 14 Jan 2010 03:45:06 +0000 (03:45 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Thu, 14 Jan 2010 03:45:06 +0000 (03:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93422 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/SValuator.cpp
test/Analysis/casts.c

index 0e56026bb4c873ef8e050a71a9b353205a619fa7..8392fcf65a2ca6a553fe81a480614b68e7d81cdf 100644 (file)
@@ -66,6 +66,9 @@ SValuator::CastResult SValuator::EvalCast(SVal val, const GRState *state,
     if (C.hasSameUnqualifiedType(castTy, originalTy))
       return CastResult(state, val);
 
+  if (castTy->isIntegerType() && originalTy->isIntegerType())
+    return CastResult(state, EvalCastNL(cast<NonLoc>(val), castTy));
+
   // Check for casts from pointers to integers.
   if (castTy->isIntegerType() && Loc::IsLocType(originalTy))
     return CastResult(state, EvalCastL(cast<Loc>(val), castTy));
index 4b7291617189fc96908ca1312c7a4b4a298d06c3..e106f3483290c5f86750f29bf5639c2ff57436e4 100644 (file)
@@ -57,3 +57,14 @@ void doit(char *data, int len) {
         memcpy(buf, data, len);
     }
 }
+
+struct pcm_feeder {
+  void *data;
+};
+// Test cast a pointer to long and then to int does not crash SValuator.
+void feed_swaplr (struct pcm_feeder *f)
+{
+  int bps;
+  bps = (long) f->data;
+  (void) bps;
+}