forked from OSchip/llvm-project
Explicitly check for casts to double or complex types instead of possibly asserting in SValuator.
llvm-svn: 95128
This commit is contained in:
parent
47d7347858
commit
416b923786
|
@ -66,6 +66,12 @@ SValuator::CastResult SValuator::EvalCast(SVal val, const GRState *state,
|
|||
if (C.hasSameUnqualifiedType(castTy, originalTy))
|
||||
return CastResult(state, val);
|
||||
|
||||
// Check for casts to real or complex numbers. We don't handle these at all
|
||||
// right now.
|
||||
if (castTy->isFloatingType() || castTy->isAnyComplexType())
|
||||
return CastResult(state, UnknownVal());
|
||||
|
||||
// Check for casts from integers to integers.
|
||||
if (castTy->isIntegerType() && originalTy->isIntegerType())
|
||||
return CastResult(state, EvalCastNL(cast<NonLoc>(val), castTy));
|
||||
|
||||
|
|
|
@ -851,3 +851,18 @@ int rdar_7593875(int n) {
|
|||
// Previously we got a false positive about 'v' being uninitialized.
|
||||
return v; // no-warning
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Handle casts from symbolic regions (packaged as integers) to doubles.
|
||||
// Previously this caused an assertion failure.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void *foo_rev95119();
|
||||
void baz_rev95119(double x);
|
||||
void bar_rev95119() {
|
||||
// foo_rev95119() returns a symbolic pointer. It is then
|
||||
// cast to an int which is then cast to a double.
|
||||
int value = (int) foo_rev95119();
|
||||
baz_rev95119((double)value);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue