On 07/24/2015 04:04 PM, Gilles Chanteperdrix wrote:
> 
> Philippe Gerum wrote:
>> On 07/24/2015 03:20 PM, Gilles Chanteperdrix wrote:
>>>
>>> git repository hosting wrote:
>>>> Module: xenomai-3
>>>> Branch: next
>>>> Commit: 2a584d6763c64f9e566b5f53094d57dd72688857
>>>> URL:
>>>> http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=2a584d6763c64f9e566b5f53094d57dd72688857
>>>>
>>>> Author: Philippe Gerum <[email protected]>
>>>> Date:   Thu Jul 23 19:13:29 2015 +0200
>>>>
>>>> boilerplate: add offsetof() shorthand
>>>>
>>>> ---
>>>>
>>>>  include/boilerplate/compiler.h |    4 ++++
>>>>  1 file changed, 4 insertions(+)
>>>>
>>>> diff --git a/include/boilerplate/compiler.h
>>>> b/include/boilerplate/compiler.h
>>>> index e27d165..876e004 100644
>>>> --- a/include/boilerplate/compiler.h
>>>> +++ b/include/boilerplate/compiler.h
>>>> @@ -54,4 +54,8 @@
>>>>  #define __aligned(__n)    __attribute__((aligned (__n)))
>>>>  #endif
>>>>
>>>> +#ifndef offsetof
>>>> +#define offsetof(__type, __member)  __builtin_offsetof(__type,
>>>> __member)
>>>> +#endif
>>>
>>> offsetof should be defined by glibc headers. By adding a definition, you
>>> risk a compiler warning about multiple definitions if someone uses the
>>> proper glibc header.
>>>
>>>
>>
>> There is hardly any risk of that kind when using the gcc builtin.
>>
> 
> builtin or not, if I compile the following program:
> 
> #include <stddef.h>
> #include <stdio.h>
> #include <stdlib.h>
> 
> #define offsetof(__type, __member)  __builtin_offsetof(__type,__member)


Your program is wrong in the first place, since offsetof() is defined by
stddef.h. Given that 3.x assumes a modern compiler with offsetof()
available from there, you are just asking for troubles, especially since
you explicitly omit the guard, which is not the best way to get things
working either.

What can be done is including stddef.h from compiler.h, and provide a
placeholder for offsetof() based on the null cast trick. That would make
more sense.

> 
> int main(void)
> {
>       printf("Hello\n");
>       return EXIT_SUCCESS;
> }
> 
> I get the following warning:
> 
> $ gcc -Wall -W -o foo foo.c
> foo.c:5:0: warning: "offsetof" redefined [enabled by default]
>  #define offsetof(__type, __member)  __builtin_offsetof(__type,__member)
>  ^
> In file included from /usr/include/alloca.h:24:0,
>                  from /usr/include/stdlib.h:491,
>                  from foo.c:3:
> /usr/lib64/gcc/x86_64-slackware-linux/4.8.2/include/stddef.h:413:0: note:
> this is the location of the previous definition
>  #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
>  ^
> 
> 


-- 
Philippe.

_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai

Reply via email to