diff --git a/hipamd/src/hip_memory.cpp b/hipamd/src/hip_memory.cpp index a64ad94e81..df1b70a3f8 100644 --- a/hipamd/src/hip_memory.cpp +++ b/hipamd/src/hip_memory.cpp @@ -119,7 +119,13 @@ hipError_t hipMalloc(void** ptr, size_t sizeBytes) HIP_INIT_API(ptr, sizeBytes); hipError_t hip_status = hipSuccess; - + // return NULL pointer when malloc size is 0 + if (sizeBytes == 0) + { + *ptr = NULL; + return ihipLogStatus(hip_status); + } + auto ctx = ihipGetTlsDefaultCtx(); if (ctx) { diff --git a/hipamd/tests/src/runtimeApi/memory/hipMemoryAllocate.cpp b/hipamd/tests/src/runtimeApi/memory/hipMemoryAllocate.cpp index eeba7fd345..dccc00b0e0 100644 --- a/hipamd/tests/src/runtimeApi/memory/hipMemoryAllocate.cpp +++ b/hipamd/tests/src/runtimeApi/memory/hipMemoryAllocate.cpp @@ -21,7 +21,7 @@ THE SOFTWARE. #define SIZE 1024*1024*256 int main(){ - float *Ad, *B, *Bd, *Bm, *C, *Cd; + float *Ad, *B, *Bd, *Bm, *C, *Cd, *ptr_0; B = (float*)malloc(SIZE); hipMalloc((void**)&Ad, SIZE); hipHostMalloc((void**)&B, SIZE); @@ -31,12 +31,15 @@ int main(){ hipHostGetDevicePointer((void**)&Cd, C, 0/*flags*/); + HIPCHECK_API(hipMalloc((void**)&ptr_0,0), hipSuccess); + HIPCHECK_API(hipFree(Ad) , hipSuccess); HIPCHECK_API(hipHostFree(Ad) , hipErrorInvalidValue); HIPCHECK_API(hipFree(B) , hipErrorInvalidDevicePointer); // try to hipFree on malloced memory HIPCHECK_API(hipFree(Bd) , hipErrorInvalidDevicePointer); HIPCHECK_API(hipFree(Bm) , hipErrorInvalidDevicePointer); + HIPCHECK_API(hipFree(ptr_0) , hipSuccess); HIPCHECK_API(hipHostFree(Bd) , hipSuccess); HIPCHECK_API(hipHostFree(Bm) , hipSuccess);