]> granicus.if.org Git - esp-idf/commitdiff
heap: test: don’t warn about oversized mallocs
authorIvan Grokhotkov <ivan@espressif.com>
Wed, 29 Aug 2018 04:52:03 +0000 (12:52 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Wed, 29 Aug 2018 06:40:28 +0000 (14:40 +0800)
components/heap/test/test_malloc.c

index 1e13ce3603a509b5a64af0eb01db5bf9b3c22470..52dc5d171a32a6b89206ca6bb5384cdf4056a01f 100644 (file)
@@ -88,23 +88,42 @@ TEST_CASE("Check if reserved DMA pool still can allocate even when malloc()'ed m
 
 #endif
 
+
+/* As you see, we are desperately trying to outsmart the compiler, so that it
+ * doesn't warn about oversized allocations in the next two unit tests.
+ * To be removed when we switch to GCC 8.2 and add
+ * -Wno-alloc-size-larger-than=PTRDIFF_MAX to CFLAGS for this file.
+ */
+void* (*g_test_malloc_ptr)(size_t) = &malloc;
+void* (*g_test_calloc_ptr)(size_t, size_t) = &calloc;
+
+void* test_malloc_wrapper(size_t size)
+{
+    return (*g_test_malloc_ptr)(size);
+}
+
+void* test_calloc_wrapper(size_t count, size_t size)
+{
+    return (*g_test_calloc_ptr)(count, size);
+}
+
 TEST_CASE("alloc overflows should all fail", "[heap]")
 {
     /* allocates 8 bytes */
-    TEST_ASSERT_NULL(calloc(SIZE_MAX / 2 + 4, 2));
+    TEST_ASSERT_NULL(test_calloc_wrapper(SIZE_MAX / 2 + 4, 2));
 
     /* will overflow if any poisoning is enabled
        (should fail for sensible OOM reasons, otherwise) */
-    TEST_ASSERT_NULL(malloc(SIZE_MAX - 1));
-    TEST_ASSERT_NULL(calloc(SIZE_MAX - 1, 1));
+    TEST_ASSERT_NULL(test_malloc_wrapper(SIZE_MAX - 1));
+    TEST_ASSERT_NULL(test_calloc_wrapper(SIZE_MAX - 1, 1));
 }
 
 TEST_CASE("unreasonable allocs should all fail", "[heap]")
 {
-    TEST_ASSERT_NULL(calloc(16, 1024*1024));
-    TEST_ASSERT_NULL(malloc(16*1024*1024));
-    TEST_ASSERT_NULL(malloc(SIZE_MAX / 2));
-    TEST_ASSERT_NULL(malloc(SIZE_MAX - 256));
-    TEST_ASSERT_NULL(malloc(xPortGetFreeHeapSize() - 1));
+    TEST_ASSERT_NULL(test_calloc_wrapper(16, 1024*1024));
+    TEST_ASSERT_NULL(test_malloc_wrapper(16*1024*1024));
+    TEST_ASSERT_NULL(test_malloc_wrapper(SIZE_MAX / 2));
+    TEST_ASSERT_NULL(test_malloc_wrapper(SIZE_MAX - 256));
+    TEST_ASSERT_NULL(test_malloc_wrapper(xPortGetFreeHeapSize() - 1));
 }