| // RUN: %clang_analyze_cc1 -fblocks -analyzer-checker core,unix -verify %s |
| |
| namespace std { |
| typedef struct once_flag_s { |
| int _M_once = 0; |
| } once_flag; |
| |
| template <class Callable, class... Args> |
| void call_once(once_flag &o, Callable&& func, Args&&... args); |
| } // namespace std |
| |
| typedef __typeof(sizeof(int)) size_t; |
| void *malloc(size_t); |
| |
| void callee() {} |
| |
| void test_no_state_change_in_body_farm() { |
| std::once_flag flag; |
| call_once(flag, callee); // no-crash |
| malloc(1); |
| } // expected-warning{{Potential memory leak}} |
| |
| void test_no_state_change_in_body_farm_2() { |
| void *p = malloc(1); |
| std::once_flag flag; |
| call_once(flag, callee); // no-crash |
| p = 0; |
| } // expected-warning{{Potential leak of memory pointed to by 'p'}} |