27 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=unix.MallocSizeof -verify %s2 3#include <stddef.h>4 5void *malloc(size_t size);6void *calloc(size_t nmemb, size_t size);7void *realloc(void *ptr, size_t size);8void free(void *ptr);9 10struct A {};11struct B {};12 13void foo(unsigned int unsignedInt, unsigned int readSize) {14 // Verify the checker is working as expected.15 A* a = static_cast<A*>(malloc(sizeof(int))); // expected-warning {{Result of 'malloc' is converted to a pointer of type 'A', which is incompatible with sizeof operand type 'int'}}16 free(a);17}18 19void bar() {20 A *x = static_cast<A*>(calloc(10, sizeof(void*))); // expected-warning {{Result of 'calloc' is converted to a pointer of type 'A', which is incompatible with sizeof operand type 'void *'}}21 // sizeof(void*) is compatible with any pointer.22 A **y = static_cast<A**>(calloc(10, sizeof(void*))); // no-warning23 free(x);24 free(y);25}26 27