On 07/24/2015 04:15 PM, Gilles Chanteperdrix wrote:
> 
> Philippe Gerum wrote:
>> 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.
> 
> I did that on purpose to illustrate the case that would happen if stddef
> was included after compiler.h, because the compiler stddef.h does not
> contain any guard. The guard in compiler.h does not work if compiler.h is
> included first.
> 
>>
>> 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.
> 
> Not really, stddef.h has been defining offetof for ages.
> 
> 
> 

That is not the point, including stddef.h first in compiler.h before
trying the fallback definition would prevent the issue you mentioned a
sentence above. Whether the fallback implementation would ever be picked
or not due to stddef.h defining offsetof() most of the time is not
really an urgent issue.

-- 
Philippe.

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

Reply via email to