ExprEngine: Handle variable annotations better
This commit is contained in:
parent
b6db5116c3
commit
4235a29501
|
@ -234,6 +234,8 @@ namespace {
|
|||
return ExprEngine::ValuePtr();
|
||||
ExprEngine::ValuePtr value = getValueRangeFromValueType(getNewSymbolName(), valueType, *settings);
|
||||
if (value) {
|
||||
if (tok->variable() && tok->variable()->nameToken())
|
||||
addConstraints(value, tok->variable()->nameToken());
|
||||
assignValue(tok, varId, value);
|
||||
}
|
||||
return value;
|
||||
|
|
|
@ -34,6 +34,7 @@ private:
|
|||
void run() OVERRIDE {
|
||||
#ifdef USE_Z3
|
||||
TEST_CASE(annotation1);
|
||||
TEST_CASE(annotation2);
|
||||
|
||||
TEST_CASE(expr1);
|
||||
TEST_CASE(expr2);
|
||||
|
@ -165,6 +166,21 @@ private:
|
|||
ASSERT_EQUALS(expected, expr(code, "<"));
|
||||
}
|
||||
|
||||
void annotation2() {
|
||||
const char code[] = "__cppcheck_low__(100) short x;\n"
|
||||
" void f() {\n"
|
||||
" return x < 10;\n"
|
||||
"}";
|
||||
|
||||
const char expected[] = "(declare-fun $1 () Int)\n"
|
||||
"(assert (>= $1 100))\n" // <- annotation
|
||||
"(assert (and (>= $1 (- 32768)) (<= $1 32767)))\n"
|
||||
"(assert (< $1 10))\n"
|
||||
"z3::unsat";
|
||||
|
||||
ASSERT_EQUALS(expected, expr(code, "<"));
|
||||
}
|
||||
|
||||
void expr1() {
|
||||
ASSERT_EQUALS("-32768:32767", getRange("void f(short x) { a = x; }", "x"));
|
||||
}
|
||||
|
@ -409,9 +425,9 @@ private:
|
|||
|
||||
void floatValue3() {
|
||||
const char code[] = "void foo(float f) { return f > 12.0; }";
|
||||
const char expected[] = "(declare-fun |12.0| () (_ FloatingPoint 11 53))\n"
|
||||
"(declare-fun $1 () (_ FloatingPoint 11 53))\n"
|
||||
"(assert (fp.gt $1 |12.0|))\n"
|
||||
const char expected[] = "(declare-fun |12.0| () Real)\n"
|
||||
"(declare-fun $1 () Real)\n"
|
||||
"(assert (> $1 |12.0|))\n"
|
||||
"z3::sat";
|
||||
ASSERT_EQUALS(expected, expr(code, ">"));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue