Fix nightly test warnings in hashtable implementation.
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 27 May 2011 09:17:06 +0000 (09:17 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 27 May 2011 09:17:06 +0000 (09:17 +0000)
The warning is reported with latest versions of GCC, starting
from 4.5.
The array definition didn't use a constant expression (as defined
by the standard). Defining an enum value fixes the issue.

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4932 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/struct/hashtable.h

index 695be32772a6b2ff029796237477399aaef1b546..07a514d5e90330007f558310b946f2af6536b8a4 100644 (file)
@@ -133,7 +133,8 @@ typedef struct
 
 /** Exactly like \c DECLARE_HASHTABLE, but the variable will be declared as static. */
 #define DECLARE_HASHTABLE_STATIC(name, size, hook_gk) \
-       static const void* name##_nodes[1 << UINT32_LOG2(size)]; \
+       enum { name##_SIZE = (1 << UINT32_LOG2(size)), }; \
+       static const void* name##_nodes[name##_SIZE]; \
        static struct HashTable name = \
                { \
                        .mem = name##_nodes, \
@@ -155,8 +156,10 @@ typedef struct
 
        /** Exactly like \c DECLARE_HASHTABLE_INTERNALKEY, but the variable will be declared as static. */
        #define DECLARE_HASHTABLE_INTERNALKEY_STATIC(name, size) \
-               static uint8_t name##_keys[(1 << UINT32_LOG2(size)) * (INTERNAL_KEY_MAX_LENGTH + 1)]; \
-               static const void* name##_nodes[1 << UINT32_LOG2(size)]; \
+               enum { name##_KEYS = ((1 << UINT32_LOG2(size)) * (INTERNAL_KEY_MAX_LENGTH + 1)), \
+                       name##_SIZE = (1 << UINT32_LOG2(size)), }; \
+               static uint8_t name##_keys[name##_KEYS]; \
+               static const void* name##_nodes[name##_SIZE]; \
                static struct HashTable name = \
                        { \
                                .mem = name##_nodes, \