list: fix an issue with android build using clang
authorRob Clark <robclark@freedesktop.org>
Tue, 2 Aug 2016 20:16:02 +0000 (16:16 -0400)
committerRob Clark <robclark@freedesktop.org>
Tue, 2 Aug 2016 20:22:45 +0000 (16:22 -0400)
Sorry, I don't understand the android build system enough to say *which*
version of clang this effects, but either "clang-2812033" or
"clang-3016494" (probably the later).

But when 'sample' is undefined (ie. unitialized variable), the result is
not as well defined as it is with gcc.  Instead use a typeof() cast with
a defined value (ie. zero).

This fixes a crash that was reported on android.

Reported-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
util_double_list.h

index 5d01f52..7e48b26 100644 (file)
@@ -110,7 +110,7 @@ static inline void list_delinit(struct list_head *item)
 #ifndef container_of
 #define container_of(ptr, sample, member)                              \
     (void *)((char *)(ptr)                                             \
-            - ((char *)&(sample)->member - (char *)(sample)))
+            - ((char *)&((typeof(sample))0)->member))
 #endif
 
 #define LIST_FOR_EACH_ENTRY(pos, head, member)                         \