1e449edc5bdace60f9d754c32abc5459bc7d94a14Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,cplusplus.NewDelete,unix.MismatchedDeallocator -std=c++11 -verify %s
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -analyze -analyzer-checker=core,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,unix.MismatchedDeallocator -DLEAKS -std=c++11 -verify %s
3648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// expected-no-diagnostics
4648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
5648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevtypedef __typeof(sizeof(int)) size_t;
6648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid *malloc(size_t);
7648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid free(void *);
8648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
9648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev//------------------------------------------------------------------
10648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// Check that alpha.cplusplus.NewDelete + unix.MismatchedDeallocator
11648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// does not enable warnings produced by the unix.Malloc checker.
12648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev//------------------------------------------------------------------
13648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid testMallocFreeNoWarn() {
14648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int i;
15648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  free(&i); // no warn
16648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
17648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p1 = (int *)malloc(sizeof(int));
18648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  free(++p1); // no warn
19648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
20648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p2 = (int *)malloc(sizeof(int));
21648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  free(p2);
22648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  free(p2); // no warn
23648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
24648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p3 = (int *)malloc(sizeof(int)); // no warn
25648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
26648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p4 = (int *)malloc(sizeof(int));
27648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  free(p4);
28648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int j = *p4; // no warn
29648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev}
30