diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-01-14 03:45:06 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-01-14 03:45:06 +0000 |
commit | 7b81e8fe6f8576340af7899c1828f1af0781d775 (patch) | |
tree | 49cbf37c537d7798d0aae48b0d50212193ee732e | |
parent | def9107059d460ada5f0eb3d58189c59122e3c3f (diff) |
Fix pr6035.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93422 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/SValuator.cpp | 3 | ||||
-rw-r--r-- | test/Analysis/casts.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Analysis/SValuator.cpp b/lib/Analysis/SValuator.cpp index 0e56026bb4..8392fcf65a 100644 --- a/lib/Analysis/SValuator.cpp +++ b/lib/Analysis/SValuator.cpp @@ -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)); diff --git a/test/Analysis/casts.c b/test/Analysis/casts.c index 4b72916171..e106f34832 100644 --- a/test/Analysis/casts.c +++ b/test/Analysis/casts.c @@ -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; +} |