| // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -analyzer-config widen-loops=true -analyzer-disable-retry-exhausted -verify %s |
| void clang_analyzer_eval(bool); |
| void clang_analyzer_dump(int); |
| // 'this' pointer is not an lvalue, we should not invalidate it. |
| namespace this_pointer_after_loop_widen { |
| void test_temporary_object() { |
| for (int i = 0; i < 10; ++i) { |
| clang_analyzer_eval(b.mem == 0); // expected-warning{{TRUE}} |
| for (int i = 0; i < 10; ++i) { |
| clang_analyzer_eval(c.mem == 0); // expected-warning{{TRUE}} |
| clang_analyzer_eval(c.mem == 10); // expected-warning{{TRUE}} |
| for (int i = 0; i < 10; ++i) { |
| clang_analyzer_eval(d->mem == 0); // expected-warning{{TRUE}} |
| clang_analyzer_eval(d->mem == 10); // expected-warning{{TRUE}} |
| for (int i = 0; i < 10; ++i) { |
| void test_chained_method_call() { |
| clang_analyzer_eval(e.mem == 10); // expected-warning{{TRUE}} |
| } // namespace this_pointer_after_loop_widen |