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))
|
if (C.hasSameUnqualifiedType(castTy, originalTy))
|
||||||
return CastResult(state, val);
|
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())
|
if (castTy->isIntegerType() && originalTy->isIntegerType())
|
||||||
return CastResult(state, EvalCastNL(cast<NonLoc>(val), castTy));
|
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.
|
// Previously we got a false positive about 'v' being uninitialized.
|
||||||
return v; // no-warning
|
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