1648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,unix.MismatchedDeallocator -analyzer-store region -std=c++11 -verify %s
2648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// expected-no-diagnostics
3648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
4648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevtypedef __typeof(sizeof(int)) size_t;
5648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid *malloc(size_t);
6648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid free(void *);
7648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
8648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev//--------------------------------------------------------------------
9648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// Check that unix.Malloc + unix.MismatchedDeallocator does not enable
10648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev// warnings produced by the alpha.cplusplus.NewDelete checker.
11648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev//--------------------------------------------------------------------
12648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsevvoid testNewDeleteNoWarn() {
13648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int i;
14648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  delete &i; // no-warning
15648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
16648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p1 = new int;
17648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  delete ++p1; // no-warning
18648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
19648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p2 = new int;
20648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  delete p2;
21648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  delete p2; // no-warning
22648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
23648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p3 = new int; // no-warning
24648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev
25648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  int *p4 = new int;
26648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev  delete p4;
2733337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  int j = *p4; // no-warning
2833337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar}
2933337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar
3033337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainarvoid testUseZeroAllocNoWarn() {
3133337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  int *p1 = (int *)operator new(0);
3233337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  *p1 = 1; // no-warning
3333337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar
3433337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  int *p2 = (int *)operator new[](0);
3533337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  p2[0] = 1; // no-warning
3633337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar
3733337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  int *p3 = new int[0];
3833337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar  p3[0] = 1; // no-warning
39648cb71625a2ab3164b2cacac9e9cb3d22b03bd7Anton Yartsev}
40