2014-01-10 17:57:25

by Donald Carr

[permalink] [raw]
Subject: Compilation using clang

Top of the morning,

qtconnectivity currently contains a kludge which is required due to
the use of the GCC typeof extension in bluetooth.h which is breaking
with Clang compilation against the cxx11 spec.

The kludge in question involves molesting the standard (eg -std=cxx11)
specified to the compiler (explicitly away from cxx11 toward g++0x)
and hence I am hoping to be able to murder its intrusive self. I am
not entirely clear on the nuances though:

This is the offending section:

#define bt_get_unaligned(ptr) \
({ \
struct __attribute__((packed)) { \
typeof(*(ptr)) __v; \
} *__p = (typeof(__p)) (ptr); \
__p->__v; \
})

#define bt_put_unaligned(val, ptr) \
do { \
struct __attribute__((packed)) { \
typeof(*(ptr)) __v; \
} *__p = (typeof(__p)) (ptr); \
__p->__v = (val); \
} while(0)

and changing typeof to __typeof__ has been verified to succeed in the
stated circumstance. I don't know whether this is the ideal solution,
or whether decltype or so other designator would be a closer/better
match.

Any feedback would be greatly appreciated, I am using this change
locally and I think it could be of broader use to people.

Yours sincerely,
Donald Carr


--
-------------------------------
?v? Donald Carr
/(_)\ Vaguely Professional Penguin lover
^ ^

Cave canem, te necet lingendo


2014-01-17 21:26:37

by Donald Carr

[permalink] [raw]
Subject: Re: Compilation using clang

Hola,

Thanks for the rapid response :)

I am simply attaching a patch, probably in complete defiance of some
standardized announcement/submission pattern.

Yours sincerely,
Donald

On Fri, Jan 10, 2014 at 12:06 PM, Vinicius Costa Gomes
<[email protected]> wrote:
> Hi Donald,
>
> On 09:57 Fri 10 Jan, Donald Carr wrote:
>> Top of the morning,
>>
>> qtconnectivity currently contains a kludge which is required due to
>> the use of the GCC typeof extension in bluetooth.h which is breaking
>> with Clang compilation against the cxx11 spec.
>
> Another kludge that I have seen is putting a
> "#define typeof(x) __tupeof__(x)" before including bluetooth.h.
>
>>
>> The kludge in question involves molesting the standard (eg -std=cxx11)
>> specified to the compiler (explicitly away from cxx11 toward g++0x)
>> and hence I am hoping to be able to murder its intrusive self. I am
>> not entirely clear on the nuances though:
>>
>> This is the offending section:
>>
>> #define bt_get_unaligned(ptr) \
>> ({ \
>> struct __attribute__((packed)) { \
>> typeof(*(ptr)) __v; \
>> } *__p = (typeof(__p)) (ptr); \
>> __p->__v; \
>> })
>>
>> #define bt_put_unaligned(val, ptr) \
>> do { \
>> struct __attribute__((packed)) { \
>> typeof(*(ptr)) __v; \
>> } *__p = (typeof(__p)) (ptr); \
>> __p->__v = (val); \
>> } while(0)
>>
>> and changing typeof to __typeof__ has been verified to succeed in the
>> stated circumstance. I don't know whether this is the ideal solution,
>> or whether decltype or so other designator would be a closer/better
>> match.
>
> I would vote for changing it to __typeof__.
>
>>
>> Any feedback would be greatly appreciated, I am using this change
>> locally and I think it could be of broader use to people.
>
> Please send a patch and let's see what others think.
>
>>
>> Yours sincerely,
>> Donald Carr
>>
>>
>> --
>> -------------------------------
>> ?v? Donald Carr
>> /(_)\ Vaguely Professional Penguin lover
>> ^ ^
>>
>> Cave canem, te necet lingendo
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
> Cheers,
> --
> Vinicius



--
-------------------------------
?v? Donald Carr
/(_)\ Vaguely Professional Penguin lover
^ ^

Cave canem, te necet lingendo


Attachments:
0001-Bluez-Move-off-gcc-typeof-extension.patch (1.00 kB)

2014-01-10 20:06:24

by Vinicius Costa Gomes

[permalink] [raw]
Subject: Re: Compilation using clang

Hi Donald,

On 09:57 Fri 10 Jan, Donald Carr wrote:
> Top of the morning,
>
> qtconnectivity currently contains a kludge which is required due to
> the use of the GCC typeof extension in bluetooth.h which is breaking
> with Clang compilation against the cxx11 spec.

Another kludge that I have seen is putting a
"#define typeof(x) __tupeof__(x)" before including bluetooth.h.

>
> The kludge in question involves molesting the standard (eg -std=cxx11)
> specified to the compiler (explicitly away from cxx11 toward g++0x)
> and hence I am hoping to be able to murder its intrusive self. I am
> not entirely clear on the nuances though:
>
> This is the offending section:
>
> #define bt_get_unaligned(ptr) \
> ({ \
> struct __attribute__((packed)) { \
> typeof(*(ptr)) __v; \
> } *__p = (typeof(__p)) (ptr); \
> __p->__v; \
> })
>
> #define bt_put_unaligned(val, ptr) \
> do { \
> struct __attribute__((packed)) { \
> typeof(*(ptr)) __v; \
> } *__p = (typeof(__p)) (ptr); \
> __p->__v = (val); \
> } while(0)
>
> and changing typeof to __typeof__ has been verified to succeed in the
> stated circumstance. I don't know whether this is the ideal solution,
> or whether decltype or so other designator would be a closer/better
> match.

I would vote for changing it to __typeof__.

>
> Any feedback would be greatly appreciated, I am using this change
> locally and I think it could be of broader use to people.

Please send a patch and let's see what others think.

>
> Yours sincerely,
> Donald Carr
>
>
> --
> -------------------------------
> ?v? Donald Carr
> /(_)\ Vaguely Professional Penguin lover
> ^ ^
>
> Cave canem, te necet lingendo
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


Cheers,
--
Vinicius