On 7/10/19 9:39 PM, Jan Kiszka via Xenomai wrote:
> From: Jan Kiszka <jan.kis...@siemens.com>
> 
> This was ignored by most compilers so far, but it breaks at least under
> c++11.

This was hardly ignored since this evaluates to a required type
information, the issue is rather with typeof() belonging to the GNU
extension set. Building with -std=gnu++11 solves that issue with the
current implementation which generally assumes those extensions are enabled.

> 
> Reported-by: Stéphane Ancelot <sance...@numalliance.com>
> Reported-by: Cris Almaraz <cristina.alma...@gmail.com>
> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
> ---
> 
> Thanks for reporting (and sorry for the long patch delay). This should
> fix it.
> 
>  include/boilerplate/tunables.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/boilerplate/tunables.h b/include/boilerplate/tunables.h
> index db8523be67..38f414e455 100644
> --- a/include/boilerplate/tunables.h
> +++ b/include/boilerplate/tunables.h
> @@ -37,10 +37,10 @@ static inline int __may_change_config_tunable(void)
>       __read_ ## __name ## _ ## __scope
> 
>  #define __define_tunable(__name, __type, __val, __scope)     \
> -     void __tunable_set_call(__name, __scope)(typeof(__type) __val)
> +     void __tunable_set_call(__name, __scope)(__type __val)
> 
>  #define __read_tunable(__name, __type, __scope)      \
> -     typeof(__type) __tunable_get_call(__name, __scope)(void)
> +     __type __tunable_get_call(__name, __scope)(void)
> 
>  #define define_config_tunable(__name, __type, __val) \
>       __define_tunable(__name, __type, __val, config)
> --


That won't work with non-trivial type expr like this one:

int (*foo_handler)(void);

define_config_tunable(foobar, int (*)(void), handler)
{
        foo_handler = handler;
}

And we have those in the field already.

-- 
Philippe.

Reply via email to