@@ -160,6 +160,7 @@ class TestValueFlow : public TestFixture {
160160 TEST_CASE (valueFlowSymbolicIdentity);
161161 TEST_CASE (valueFlowSymbolicStrlen);
162162 TEST_CASE (valueFlowSmartPointer);
163+ TEST_CASE (valueFlowImpossibleMinMax);
163164 }
164165
165166 static bool isNotTokValue (const ValueFlow::Value &val) {
@@ -7631,6 +7632,67 @@ class TestValueFlow : public TestFixture {
76317632 " }\n " ;
76327633 ASSERT_EQUALS (false , testValueOfX (code, 5U , 0 ));
76337634 }
7635+
7636+ void valueFlowImpossibleMinMax ()
7637+ {
7638+ const char * code;
7639+
7640+ code = " void f(int a, int b) {\n "
7641+ " int x = a < b ? a : b;\n "
7642+ " return x;\n "
7643+ " }\n " ;
7644+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , 1 ));
7645+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " b" , 1 ));
7646+
7647+ code = " void f(int a, int b) {\n "
7648+ " int x = a > b ? a : b;\n "
7649+ " return x;\n "
7650+ " }\n " ;
7651+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , -1 ));
7652+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " b" , -1 ));
7653+
7654+ code = " void f(int a, int b) {\n "
7655+ " int x = a > b ? b : a;\n "
7656+ " return x;\n "
7657+ " }\n " ;
7658+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , 1 ));
7659+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " b" , 1 ));
7660+
7661+ code = " void f(int a, int b) {\n "
7662+ " int x = a < b ? b : a;\n "
7663+ " return x;\n "
7664+ " }\n " ;
7665+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , -1 ));
7666+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " b" , -1 ));
7667+
7668+ code = " void f(int a) {\n "
7669+ " int x = a < 0 ? a : 0;\n "
7670+ " return x;\n "
7671+ " }\n " ;
7672+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , 1 ));
7673+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , 1 ));
7674+
7675+ code = " void f(int a) {\n "
7676+ " int x = a > 0 ? a : 0;\n "
7677+ " return x;\n "
7678+ " }\n " ;
7679+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , -1 ));
7680+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , -1 ));
7681+
7682+ code = " void f(int a) {\n "
7683+ " int x = a > 0 ? 0 : a;\n "
7684+ " return x;\n "
7685+ " }\n " ;
7686+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , 1 ));
7687+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , 1 ));
7688+
7689+ code = " void f(int a) {\n "
7690+ " int x = a < 0 ? 0 : a;\n "
7691+ " return x;\n "
7692+ " }\n " ;
7693+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , " a" , -1 ));
7694+ ASSERT_EQUALS (true , testValueOfXImpossible (code, 3U , -1 ));
7695+ }
76347696};
76357697
76367698REGISTER_TEST (TestValueFlow)
0 commit comments