aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch')
-rw-r--r--main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch b/main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch
new file mode 100644
index 0000000000..1078ec32cf
--- /dev/null
+++ b/main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch
@@ -0,0 +1,69 @@
+From f164875a84c35d0e0d132f99330d3fcda76ee7aa Mon Sep 17 00:00:00 2001
+From: Bobby Bingham <koorogi@koorogi.info>
+Date: Mon, 8 Dec 2014 20:18:12 -0600
+Subject: [PATCH] don't shadow functions with macros in C++
+
+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));
+
+--
+2.2.0
+