]> git.ipfire.org Git - thirdparty/util-linux.git/commit
include/c: re-add type checking in container_of()
authorRuediger Meier <ruediger.meier@ga-group.nl>
Sun, 2 Dec 2018 18:23:45 +0000 (19:23 +0100)
committerKarel Zak <kzak@redhat.com>
Fri, 4 Jan 2019 10:33:08 +0000 (11:33 +0100)
commit65a8c8500c0f1d7fbc5a7f6fe55416083c10206a
tree6c29070ae61d773d99e3a6869577cf5859b38d04
parente390ed7eea21f33d63979a0ca4eac71e427066a8
include/c: re-add type checking in container_of()

This reverts parts of commit eb06d5d4, which seems to be based on
Linux kernel commit c7acec71. Unlike the original kernel patch we did
not add that even stronger type checking by using macro BUILD_BUG_ON_MSG.
So basically we removed a useful warning when compiling such
broken code:

      struct st {
            int a;
            char b;
      };
      struct st t = { .a = 1, .b = 2 };
      struct st *x = container_of(&t.a, struct st, b);
      printf("%p %p\n", (void *)&t, (void *)x);

Moreover we also introduced a new compiler warning for intel/icc:
   "arithmetic on pointer to void or function type"

Let's just revert the update of container_of() because adding a
kernel-like BUILD_BUG_ON_MSG would be too much noise and also
problematic (see kernel commit c03567a8). Also note that the original
problem addressed by the kernel commit seems to be only reproducible
with gcc 4.9, not with any later gcc nor clang,icc. Moreover, currently
we have no such use-case in the UL sources anyways.

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
include/c.h