1*8fd74ebfSKristof Umann // RUN: %clang_analyze_cc1 -std=c++11 -verify %s \
2*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=core \
3*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=cplusplus.NewDelete \
4*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=unix.MismatchedDeallocator
5*8fd74ebfSKristof Umann //
6*8fd74ebfSKristof Umann // RUN: %clang_analyze_cc1 -std=c++11 -verify %s \
7*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=core \
8*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=cplusplus.NewDelete \
9*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=cplusplus.NewDeleteLeaks \
10*8fd74ebfSKristof Umann // RUN:   -analyzer-checker=unix.MismatchedDeallocator
11*8fd74ebfSKristof Umann 
12e3377fbcSAnton Yartsev // expected-no-diagnostics
13e3377fbcSAnton Yartsev 
14e3377fbcSAnton Yartsev typedef __typeof(sizeof(int)) size_t;
15e3377fbcSAnton Yartsev void *malloc(size_t);
16e3377fbcSAnton Yartsev void free(void *);
17e3377fbcSAnton Yartsev 
18e3377fbcSAnton Yartsev //------------------------------------------------------------------
19e3377fbcSAnton Yartsev // Check that alpha.cplusplus.NewDelete + unix.MismatchedDeallocator
20e3377fbcSAnton Yartsev // does not enable warnings produced by the unix.Malloc checker.
21e3377fbcSAnton Yartsev //------------------------------------------------------------------
testMallocFreeNoWarn()22e3377fbcSAnton Yartsev void testMallocFreeNoWarn() {
23e3377fbcSAnton Yartsev   int i;
24e3377fbcSAnton Yartsev   free(&i); // no warn
25e3377fbcSAnton Yartsev 
26e3377fbcSAnton Yartsev   int *p1 = (int *)malloc(sizeof(int));
27e3377fbcSAnton Yartsev   free(++p1); // no warn
28e3377fbcSAnton Yartsev 
29e3377fbcSAnton Yartsev   int *p2 = (int *)malloc(sizeof(int));
30e3377fbcSAnton Yartsev   free(p2);
31e3377fbcSAnton Yartsev   free(p2); // no warn
32e3377fbcSAnton Yartsev 
33e3377fbcSAnton Yartsev   int *p3 = (int *)malloc(sizeof(int)); // no warn
34e3377fbcSAnton Yartsev 
35e3377fbcSAnton Yartsev   int *p4 = (int *)malloc(sizeof(int));
36e3377fbcSAnton Yartsev   free(p4);
37e3377fbcSAnton Yartsev   int j = *p4; // no warn
38e3377fbcSAnton Yartsev }
39