configure: fixup clang stupidity
authorJens Axboe <axboe@fb.com>
Tue, 30 Jun 2015 02:46:31 +0000 (20:46 -0600)
committerJens Axboe <axboe@fb.com>
Tue, 30 Jun 2015 02:46:31 +0000 (20:46 -0600)
Doesn't like doing _Static_assert() on our structure offset
definition:

error: static_assert expression is not an integral constant expression

Lets just include that in the configure test, so we can avoid using
_Static_assert() if that kind of check fails.

Signed-off-by: Jens Axboe <axboe@fb.com>
configure

index 085f01658f06221445577505831e2030aacb8d65..a3f83d34c415e867b2a4b55dc91700d2a1a1db0e 100755 (executable)
--- a/configure
+++ b/configure
@@ -1497,9 +1497,25 @@ echo "getmntinfo                    $getmntinfo"
 static_assert="no"
 cat > $TMPC << EOF
 #include <assert.h>
+#include <stdlib.h>
+#undef offsetof
+#ifdef __compiler_offsetof
+#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
+#else
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#define container_of(ptr, type, member) ({                     \
+       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+       (type *)( (char *)__mptr - offsetof(type,member) );})
+
+struct foo {
+  int a, b;
+};
+
 int main(int argc, char **argv)
 {
-  _Static_assert( 1 == 1 , "Check");
+  _Static_assert(offsetof(struct foo, a) == 0 , "Check");
   return 0 ;
 }
 EOF