diff clang/test/Analysis/NewDelete+MismatchedDeallocator_intersections.cpp @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clang/test/Analysis/NewDelete+MismatchedDeallocator_intersections.cpp	Thu Feb 13 15:10:13 2020 +0900
@@ -0,0 +1,38 @@
+// RUN: %clang_analyze_cc1 -std=c++11 -verify %s \
+// RUN:   -analyzer-checker=core \
+// RUN:   -analyzer-checker=cplusplus.NewDelete \
+// RUN:   -analyzer-checker=unix.MismatchedDeallocator
+//
+// RUN: %clang_analyze_cc1 -std=c++11 -verify %s \
+// RUN:   -analyzer-checker=core \
+// RUN:   -analyzer-checker=cplusplus.NewDelete \
+// RUN:   -analyzer-checker=cplusplus.NewDeleteLeaks \
+// RUN:   -analyzer-checker=unix.MismatchedDeallocator
+
+// expected-no-diagnostics
+
+typedef __typeof(sizeof(int)) size_t;
+void *malloc(size_t);
+void free(void *);
+
+//------------------------------------------------------------------
+// Check that alpha.cplusplus.NewDelete + unix.MismatchedDeallocator 
+// does not enable warnings produced by the unix.Malloc checker.
+//------------------------------------------------------------------
+void testMallocFreeNoWarn() {
+  int i;
+  free(&i); // no warn
+
+  int *p1 = (int *)malloc(sizeof(int));
+  free(++p1); // no warn
+
+  int *p2 = (int *)malloc(sizeof(int));
+  free(p2);
+  free(p2); // no warn
+
+  int *p3 = (int *)malloc(sizeof(int)); // no warn
+
+  int *p4 = (int *)malloc(sizeof(int));
+  free(p4);
+  int j = *p4; // no warn
+}