@@ -163,6 +163,7 @@ class TestValueFlow : public TestFixture {
163163 TEST_CASE (valueFlowSmartPointer);
164164 TEST_CASE (valueFlowImpossibleMinMax);
165165 TEST_CASE (valueFlowImpossibleUnknownConstant);
166+ TEST_CASE (valueFlowContainerEqual);
166167 }
167168
168169 static bool isNotTokValue (const ValueFlow::Value &val) {
@@ -7889,6 +7890,58 @@ class TestValueFlow : public TestFixture {
78897890 " }\n " ;
78907891 ASSERT_EQUALS (true , testValueOfXImpossible (code, 4U , 0 ));
78917892 }
7893+
7894+ void valueFlowContainerEqual ()
7895+ {
7896+ const char * code;
7897+
7898+ code = " bool f() {\n "
7899+ " std::string s = \" abc\" ;\n "
7900+ " bool x = (s == \" def\" );\n "
7901+ " return x;\n "
7902+ " }\n " ;
7903+ ASSERT_EQUALS (true , testValueOfXKnown (code, 4U , 0 ));
7904+
7905+ code = " bool f() {\n "
7906+ " std::string s = \" abc\" ;\n "
7907+ " bool x = (s != \" def\" );\n "
7908+ " return x;\n "
7909+ " }\n " ;
7910+ ASSERT_EQUALS (true , testValueOfXKnown (code, 4U , 1 ));
7911+
7912+ code = " bool f() {\n "
7913+ " std::vector<int> v1 = {1, 2};\n "
7914+ " std::vector<int> v2 = {1, 2};\n "
7915+ " bool x = (v1 == v2);\n "
7916+ " return x;\n "
7917+ " }\n " ;
7918+ ASSERT_EQUALS (true , testValueOfXKnown (code, 5U , 1 ));
7919+
7920+ code = " bool f() {\n "
7921+ " std::vector<int> v1 = {1, 2};\n "
7922+ " std::vector<int> v2 = {1, 2};\n "
7923+ " bool x = (v1 != v2);\n "
7924+ " return x;\n "
7925+ " }\n " ;
7926+ ASSERT_EQUALS (true , testValueOfXKnown (code, 5U , 0 ));
7927+
7928+ code = " bool f(int i) {\n "
7929+ " std::vector<int> v1 = {i, i+1};\n "
7930+ " std::vector<int> v2 = {i};\n "
7931+ " bool x = (v1 == v2);\n "
7932+ " return x;\n "
7933+ " }\n " ;
7934+ ASSERT_EQUALS (true , testValueOfXKnown (code, 5U , 0 ));
7935+
7936+ code = " bool f(int i, int j) {\n "
7937+ " std::vector<int> v1 = {i, i};\n "
7938+ " std::vector<int> v2 = {i, j};\n "
7939+ " bool x = (v1 == v2);\n "
7940+ " return x;\n "
7941+ " }\n " ;
7942+ ASSERT_EQUALS (false , testValueOfX (code, 5U , 1 ));
7943+ ASSERT_EQUALS (false , testValueOfX (code, 5U , 0 ));
7944+ }
78927945};
78937946
78947947REGISTER_TEST (TestValueFlow)
0 commit comments