Malloc+MismatchedDeallocator_intersections.cpp revision 33337ca4d89605025818daf83390ab4271d598d9
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