From 5c4ccce47fec1d4d338d52042fe33a9c960e83eb Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Sep 2026 12:49:34 +0200 Subject: [PATCH 1/2] Update vf_settokenvalue.cpp --- lib/vf_settokenvalue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vf_settokenvalue.cpp b/lib/vf_settokenvalue.cpp index 9f56b57db0a..2c094b06c07 100644 --- a/lib/vf_settokenvalue.cpp +++ b/lib/vf_settokenvalue.cpp @@ -615,7 +615,7 @@ namespace ValueFlow // ~ else if (parent->str() == "~") { for (const Value &val : tok->values()) { - if (!val.isIntValue()) + if (!val.isIntValue() || (val.isImpossible() && val.intvalue < 0)) continue; Value v(val); v.intvalue = ~v.intvalue; From 98484b303aa90d7597ffcfdf2029147477d4163f Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Sep 2026 12:50:26 +0200 Subject: [PATCH 2/2] Update testvalueflow.cpp --- test/testvalueflow.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 618e16624d8..d9d35217e29 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1262,6 +1262,15 @@ class TestValueFlow : public TestFixture { ASSERT_EQUALS(1U, values.size()); ASSERT_EQUALS(~0U, values.back().intvalue); + // #15015 + code = "void f(unsigned u) {\n" + " if (~u) {}\n" + "}"; + values = tokenValues(code, "~"); + ASSERT_EQUALS(1U, values.size()); + ASSERT_EQUALS(-1, values.back().intvalue); + ASSERT(values.back().isImpossible()); + // ! code = "void f(int x) {\n" " a = !x;\n"