// RUN: %clang_analyze_cc1 -analyzer-checker=unix.MallocSizeof -verify %s
#include<stddef.h>void*malloc(size_tsize);void*calloc(size_tnmemb,size_tsize);void*realloc(void*ptr,size_tsize);voidfree(void*ptr);structA{};structB{};voidfoo(unsignedintunsignedInt,unsignedintreadSize){// Verify the checker is working as expected.
A* a =static_cast<A*>(malloc(sizeof(int)));// expected-warning {{Result of 'malloc' is converted to a pointer of type 'struct A', which is incompatible with sizeof operand type 'int'}}
free(a);}voidbar(){
A *x =static_cast<A*>(calloc(10,sizeof(void*)));// expected-warning {{Result of 'calloc' is converted to a pointer of type 'struct A', which is incompatible with sizeof operand type 'void *'}}
// sizeof(void*) is compatible with any pointer.
A **y =static_cast<A**>(calloc(10,sizeof(void*)));// no-warning
free(x);free(y);}