Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 09 Dec 2014 23:33:42 +0100
From: Jörg Krause <jkrause@...teo.de>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] don't shadow functions with macros in C++

On Mo, 2014-12-08 at 20:18 -0600, Bobby Bingham wrote:
> C++ programmers typically expect something like "::function(x,y)" to work
> and may be surprised to find that "(::function)(x,y)" is actually required
> due to the headers declaring a macro version of some standard functions.
> 
> We already omit function-like macros for C++ in most cases where there is
> a real function available. This commit extends this to the remaining
> function-like macros which have a real function version.
> ---
>  include/complex.h | 2 ++
>  include/pthread.h | 2 ++
>  include/threads.h | 2 ++
>  3 files changed, 6 insertions(+)
> 
> diff --git a/include/complex.h b/include/complex.h
> index 13a45c5..e1af0d5 100644
> --- a/include/complex.h
> +++ b/include/complex.h
> @@ -101,6 +101,7 @@ double creal(double complex);
>  float crealf(float complex);
>  long double creall(long double complex);
> 
> +#ifndef __cplusplus
>  #define __CIMAG(x, t) \
>  	((union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[1])
> 
> @@ -111,6 +112,7 @@ long double creall(long double complex);
>  #define cimag(x) __CIMAG(x, double)
>  #define cimagf(x) __CIMAG(x, float)
>  #define cimagl(x) __CIMAG(x, long double)
> +#endif
> 
>  #define __CMPLX(x, y, t) \
>  	((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
> diff --git a/include/pthread.h b/include/pthread.h
> index f7c9568..2697e8b 100644
> --- a/include/pthread.h
> +++ b/include/pthread.h
> @@ -84,7 +84,9 @@ __attribute__((const))
>  pthread_t pthread_self(void);
> 
>  int pthread_equal(pthread_t, pthread_t);
> +#ifndef __cplusplus
>  #define pthread_equal(x,y) ((x)==(y))
> +#endif
> 
>  int pthread_setcancelstate(int, int *);
>  int pthread_setcanceltype(int, int *);
> diff --git a/include/threads.h b/include/threads.h
> index 0e5836c..0179482 100644
> --- a/include/threads.h
> +++ b/include/threads.h
> @@ -51,7 +51,9 @@ void thrd_yield(void);
> 
>  thrd_t thrd_current(void);
>  int thrd_equal(thrd_t, thrd_t);
> +#ifndef __cplusplus
>  #define thrd_equal(A, B) ((A) == (B))
> +#endif
> 
>  void call_once(once_flag *, void (*)(void));
> 
> --
> Bobby Bingham

Many thanks for the patch!

Reviewed-by: Jörg Krause <jkrause@...teo.de>

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.