| // RUN: %clang_analyze_cc1 -std=c++11 -verify %s \ | |
| // RUN: -analyzer-checker=core \ | |
| // RUN: -analyzer-checker=cplusplus.NewDelete \ | |
| // RUN: -analyzer-checker=unix.MismatchedDeallocator | |
| // | |
| // RUN: %clang_analyze_cc1 -std=c++11 -verify %s \ | |
| // RUN: -analyzer-checker=core \ | |
| // RUN: -analyzer-checker=cplusplus.NewDelete \ | |
| // RUN: -analyzer-checker=cplusplus.NewDeleteLeaks \ | |
| // RUN: -analyzer-checker=unix.MismatchedDeallocator | |
| // expected-no-diagnostics | |
| typedef __typeof(sizeof(int)) size_t; | |
| void *malloc(size_t); | |
| void free(void *); | |
| //------------------------------------------------------------------ | |
| // Check that alpha.cplusplus.NewDelete + unix.MismatchedDeallocator | |
| // does not enable warnings produced by the unix.Malloc checker. | |
| //------------------------------------------------------------------ | |
| void testMallocFreeNoWarn() { | |
| int i; | |
| free(&i); // no warn | |
| int *p1 = (int *)malloc(sizeof(int)); | |
| free(++p1); // no warn | |
| int *p2 = (int *)malloc(sizeof(int)); | |
| free(p2); | |
| free(p2); // no warn | |
| int *p3 = (int *)malloc(sizeof(int)); // no warn | |
| int *p4 = (int *)malloc(sizeof(int)); | |
| free(p4); | |
| int j = *p4; // no warn | |
| } |