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