aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/0018-don-t-shadow-functions-with-macros-in-C.patch
blob: 1078ec32cf2697ac1b2e670ae4ecfbc42e05193c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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