| 4535 | } |
| 4536 | |
| 4537 | void valueFlowSwitchVariable() { |
| 4538 | const char code[] = "void f(int x) {\n" |
| 4539 | " a = x - 1;\n" // <- x can be 14 |
| 4540 | " switch (x) {\n" |
| 4541 | " case 14: a=x+2; break;\n" // <- x is 14 |
| 4542 | " };\n" |
| 4543 | " a = x;\n" // <- x can be 14 |
| 4544 | "}"; |
| 4545 | ASSERT_EQUALS(true, testConditionalValueOfX(code, 2U, 14)); |
| 4546 | TODO_ASSERT_EQUALS(true, false, testConditionalValueOfX(code, 4U, 14)); |
| 4547 | TODO_ASSERT_EQUALS(true, false, testConditionalValueOfX(code, 6U, 14)); |
| 4548 | |
| 4549 | ValueFlow::Value value1 = valueOfTok(code, "-"); |
| 4550 | ASSERT_EQUALS(13, value1.intvalue); |
| 4551 | ASSERT(!value1.isKnown()); |
| 4552 | |
| 4553 | ValueFlow::Value value2 = valueOfTok(code, "+"); |
| 4554 | TODO_ASSERT_EQUALS(16, 0, value2.intvalue); |
| 4555 | TODO_ASSERT_EQUALS(true, false, value2.isKnown()); |
| 4556 | } |
| 4557 | |
| 4558 | void valueFlowForLoop() { |
| 4559 | const char *code; |