]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/linkage.m4
jit: fix __builtin_unreachable [PR 95426]
[thirdparty/gcc.git] / libstdc++-v3 / linkage.m4
CommitLineData
ff66d28f 1dnl
92efec6e 2dnl This file contains macros for testing linkage.
ff66d28f
PE
3dnl
4
5dnl
6dnl Check to see if the (math function) argument passed is
7dnl declared when using the c++ compiler
8dnl ASSUMES argument is a math function with ONE parameter
9dnl
10dnl GLIBCXX_CHECK_MATH_DECL_1
f214923c 11AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [
ff66d28f
PE
12 AC_MSG_CHECKING([for $1 declaration])
13 if test x${glibcxx_cv_func_$1_use+set} != xset; then
14 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
15 AC_LANG_SAVE
16 AC_LANG_CPLUSPLUS
17 AC_TRY_COMPILE([#include <math.h>
18 #ifdef HAVE_IEEEFP_H
19 #include <ieeefp.h>
20 #endif
21 ],
22 [ $1(0);],
92efec6e 23 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
ff66d28f
PE
24 AC_LANG_RESTORE
25 ])
26 fi
27 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
28])
29
3df45831 30
42dedaee
KC
31dnl
32dnl Define autoheader template for using the underscore functions
33dnl For each parameter, create a macro where if func doesn't exist,
34dnl but _func does, then it will "#define func _func".
35dnl
36dnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS
37AC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS],
38[AC_FOREACH([glibcxx_ufunc], [$1],
39 [AH_VERBATIM(_[]glibcxx_ufunc,
40[#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[)
41# define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1
42# define ]glibcxx_ufunc[ _]glibcxx_ufunc[
43#endif])])
44])
45
46
ff66d28f
PE
47dnl
48dnl Check to see if the (math function) argument passed is
49dnl 1) declared when using the c++ compiler
50dnl 2) has "C" linkage
51dnl 3) if not, see if 1) and 2) for argument prepended with '_'
52dnl
53dnl Define HAVE_CARGF etc if "cargf" is declared and links
54dnl
55dnl argument 1 is name of function to check
56dnl
57dnl ASSUMES argument is a math function with ONE parameter
58dnl
59dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1
f214923c 60AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [
ff66d28f
PE
61 GLIBCXX_CHECK_MATH_DECL_1($1)
62 if test x$glibcxx_cv_func_$1_use = x"yes"; then
63 AC_CHECK_FUNCS($1)
64 else
65 GLIBCXX_CHECK_MATH_DECL_1(_$1)
66 if test x$glibcxx_cv_func__$1_use = x"yes"; then
67 AC_CHECK_FUNCS(_$1)
68 fi
69 fi
42dedaee 70 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
ff66d28f
PE
71])
72
73
74dnl
75dnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
76dnl of functions at once. It's an all-or-nothing check -- either
77dnl HAVE_XYZ is defined for each of the functions, or for none of them.
78dnl Doing it this way saves significant configure time.
f214923c 79AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [
3df45831 80 define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
ff66d28f
PE
81 AC_MSG_CHECKING([for $1 functions])
82 AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
83 AC_LANG_SAVE
84 AC_LANG_CPLUSPLUS
85 AC_TRY_COMPILE([#include <math.h>],
3df45831 86 patsubst(funclist,[\w+],[\& (0);]),
ff66d28f
PE
87 [glibcxx_cv_func_$2_use=yes],
88 [glibcxx_cv_func_$2_use=no])
89 AC_LANG_RESTORE])
90 AC_MSG_RESULT($glibcxx_cv_func_$2_use)
91 if test x$glibcxx_cv_func_$2_use = x"yes"; then
3df45831
KC
92 AC_CHECK_FUNCS(funclist)
93 else
94 AC_MSG_CHECKING([for _$1 functions])
95 AC_CACHE_VAL(glibcxx_cv_func__$2_use, [
96 AC_LANG_SAVE
97 AC_LANG_CPLUSPLUS
98 AC_TRY_COMPILE([#include <math.h>],
99 patsubst(funclist,[\w+],[_\& (0);]),
100 [glibcxx_cv_func__$2_use=yes],
101 [glibcxx_cv_func__$2_use=no])
102 AC_LANG_RESTORE])
103 AC_MSG_RESULT($glibcxx_cv_func__$2_use)
104 if test x$glibcxx_cv_func__$2_use = x"yes"; then
105 AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&]))
106 fi
ff66d28f 107 fi
42dedaee 108 GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist)
3df45831 109 undefine([funclist])
ff66d28f
PE
110])
111
112dnl
113dnl Check to see if the (math function) argument passed is
114dnl declared when using the c++ compiler
115dnl ASSUMES argument is a math function with TWO parameters
116dnl
117dnl GLIBCXX_CHECK_MATH_DECL_2
f214923c 118AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [
ff66d28f
PE
119 AC_MSG_CHECKING([for $1 declaration])
120 if test x${glibcxx_cv_func_$1_use+set} != xset; then
121 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
122 AC_LANG_SAVE
123 AC_LANG_CPLUSPLUS
124 AC_TRY_COMPILE([#include <math.h>],
125 [ $1(0, 0);],
126 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
127 AC_LANG_RESTORE
128 ])
129 fi
130 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
131])
132
133dnl
134dnl Check to see if the (math function) argument passed is
135dnl 1) declared when using the c++ compiler
136dnl 2) has "C" linkage
137dnl
138dnl Define HAVE_CARGF etc if "cargf" is declared and links
139dnl
140dnl argument 1 is name of function to check
141dnl
142dnl ASSUMES argument is a math function with TWO parameters
143dnl
144dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2
f214923c 145AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [
ff66d28f
PE
146 GLIBCXX_CHECK_MATH_DECL_2($1)
147 if test x$glibcxx_cv_func_$1_use = x"yes"; then
148 AC_CHECK_FUNCS($1)
149 else
150 GLIBCXX_CHECK_MATH_DECL_2(_$1)
151 if test x$glibcxx_cv_func__$1_use = x"yes"; then
152 AC_CHECK_FUNCS(_$1)
153 fi
154 fi
42dedaee 155 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
ff66d28f
PE
156])
157
158
159dnl
160dnl Check to see if the (math function) argument passed is
161dnl declared when using the c++ compiler
162dnl ASSUMES argument is a math function with THREE parameters
163dnl
164dnl GLIBCXX_CHECK_MATH_DECL_3
f214923c 165AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [
ff66d28f
PE
166 AC_MSG_CHECKING([for $1 declaration])
167 if test x${glibcxx_cv_func_$1_use+set} != xset; then
168 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
169 AC_LANG_SAVE
170 AC_LANG_CPLUSPLUS
171 AC_TRY_COMPILE([#include <math.h>],
172 [ $1(0, 0, 0);],
173 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
174 AC_LANG_RESTORE
175 ])
176 fi
177 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
178])
179
180dnl
181dnl Check to see if the (math function) argument passed is
182dnl 1) declared when using the c++ compiler
183dnl 2) has "C" linkage
184dnl
185dnl Define HAVE_CARGF etc if "cargf" is declared and links
186dnl
187dnl argument 1 is name of function to check
188dnl
189dnl ASSUMES argument is a math function with THREE parameters
190dnl
191dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3
f214923c 192AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [
ff66d28f
PE
193 GLIBCXX_CHECK_MATH_DECL_3($1)
194 if test x$glibcxx_cv_func_$1_use = x"yes"; then
195 AC_CHECK_FUNCS($1)
196 else
197 GLIBCXX_CHECK_MATH_DECL_3(_$1)
198 if test x$glibcxx_cv_func__$1_use = x"yes"; then
199 AC_CHECK_FUNCS(_$1)
200 fi
201 fi
42dedaee 202 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
ff66d28f
PE
203])
204
205
222a5b1d
RO
206dnl
207dnl Check to see if the (stdlib function) argument passed is
208dnl 1) declared when using the c++ compiler
209dnl 2) has "C" linkage
210dnl
211dnl argument 1 is name of function to check
212dnl
213dnl ASSUMES argument is a stdlib function without parameters
214dnl
215dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0
f214923c 216AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [
222a5b1d
RO
217 AC_MSG_CHECKING([for $1 declaration])
218 if test x${glibcxx_cv_func_$1_use+set} != xset; then
219 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
220 AC_LANG_SAVE
221 AC_LANG_CPLUSPLUS
222 AC_TRY_COMPILE([#include <stdlib.h>],
223 [ $1();],
224 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
225 AC_LANG_RESTORE
226 ])
227 fi
228 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
229 if test x$glibcxx_cv_func_$1_use = x"yes"; then
230 AC_CHECK_FUNCS($1)
231 fi
232])
233
234
cc999d03
JM
235dnl
236dnl Check to see if the (stdlib function) argument passed is
237dnl 1) declared when using the c++ compiler
238dnl 2) has "C" linkage
239dnl
240dnl argument 1 is name of function to check
241dnl
242dnl ASSUMES argument is a stdlib function with ONE parameter
243dnl
244dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1
245AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1], [
246 AC_MSG_CHECKING([for $1 declaration])
247 if test x${glibcxx_cv_func_$1_use+set} != xset; then
248 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
249 AC_LANG_SAVE
250 AC_LANG_CPLUSPLUS
251 AC_TRY_COMPILE([#include <stdlib.h>],
252 [ $1(0);],
253 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
254 AC_LANG_RESTORE
255 ])
256 fi
257 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
258 if test x$glibcxx_cv_func_$1_use = x"yes"; then
259 AC_CHECK_FUNCS($1)
260 fi
261])
262
263
ff66d28f
PE
264dnl
265dnl Check to see if the (stdlib function) argument passed is
266dnl 1) declared when using the c++ compiler
267dnl 2) has "C" linkage
268dnl
269dnl argument 1 is name of function to check
270dnl
747d0b96 271dnl ASSUMES argument is a stdlib function with TWO parameters
ff66d28f
PE
272dnl
273dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
f214923c 274AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [
ff66d28f
PE
275 AC_MSG_CHECKING([for $1 declaration])
276 if test x${glibcxx_cv_func_$1_use+set} != xset; then
277 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
278 AC_LANG_SAVE
279 AC_LANG_CPLUSPLUS
280 AC_TRY_COMPILE([#include <stdlib.h>],
281 [ $1(0, 0);],
282 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
283 AC_LANG_RESTORE
284 ])
285 fi
286 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
287 if test x$glibcxx_cv_func_$1_use = x"yes"; then
288 AC_CHECK_FUNCS($1)
289 fi
42dedaee 290 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
ff66d28f
PE
291])
292
293
294dnl
295dnl Check to see if the (stdlib function) argument passed is
296dnl 1) declared when using the c++ compiler
297dnl 2) has "C" linkage
298dnl
299dnl argument 1 is name of function to check
300dnl
747d0b96 301dnl ASSUMES argument is a stdlib function with THREE parameters
ff66d28f
PE
302dnl
303dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3
f214923c 304AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [
ff66d28f
PE
305 AC_MSG_CHECKING([for $1 declaration])
306 if test x${glibcxx_cv_func_$1_use+set} != xset; then
307 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
308 AC_LANG_SAVE
309 AC_LANG_CPLUSPLUS
310 AC_TRY_COMPILE([#include <stdlib.h>],
311 [ $1(0, 0, 0);],
312 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
313 AC_LANG_RESTORE
314 ])
315 fi
316 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
317 if test x$glibcxx_cv_func_$1_use = x"yes"; then
318 AC_CHECK_FUNCS($1)
319 fi
320])
321
ff66d28f
PE
322dnl
323dnl Check to see what the underlying c library is like
324dnl These checks need to do two things:
325dnl 1) make sure the name is declared when using the c++ compiler
326dnl 2) make sure the name has "C" linkage
327dnl This might seem like overkill but experience has shown that it's not...
328dnl
329dnl Define HAVE_STRTOLD if "strtold" is declared and links
330dnl Define HAVE_STRTOF if "strtof" is declared and links
ff66d28f
PE
331dnl
332dnl GLIBCXX_CHECK_STDLIB_SUPPORT
f214923c 333AC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [
ff66d28f
PE
334 ac_test_CXXFLAGS="${CXXFLAGS+set}"
335 ac_save_CXXFLAGS="$CXXFLAGS"
336 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
337
cc999d03
JM
338 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(at_quick_exit)
339 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(quick_exit)
ff66d28f
PE
340 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
341 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
ff66d28f
PE
342
343 CXXFLAGS="$ac_save_CXXFLAGS"
344])
345
346dnl
347dnl Check to see what the underlying c library or math library is like.
348dnl These checks need to do two things:
349dnl 1) make sure the name is declared when using the c++ compiler
350dnl 2) make sure the name has "C" linkage
351dnl This might seem like overkill but experience has shown that it's not...
352dnl
353dnl Define HAVE_CARGF etc if "cargf" is found.
354dnl
355dnl GLIBCXX_CHECK_MATH_SUPPORT
f214923c 356AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [
ff66d28f
PE
357 ac_test_CXXFLAGS="${CXXFLAGS+set}"
358 ac_save_CXXFLAGS="$CXXFLAGS"
359 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
360
361 dnl Check libm
362 AC_CHECK_LIB(m, sin, libm="-lm")
363 ac_save_LIBS="$LIBS"
364 LIBS="$LIBS $libm"
365
366 dnl Check to see if certain C math functions exist.
367 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
368 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
369 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
ff66d28f
PE
370 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
371 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
372 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
373 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
374
375 dnl Check to see if basic C math functions have float versions.
376 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
377 float_trig,
378 acosf asinf atanf \
379 cosf sinf tanf \
380 coshf sinhf tanhf)
381 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
382 float_round,
383 ceilf floorf)
384 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
385 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
386 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
387 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
388 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
389 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
390 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
391 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
392 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
393 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
394 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
395 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
3a642d50 396 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf)
ff66d28f
PE
397 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
398 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
399 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
400 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
401
402 dnl Check to see if basic C math functions have long double versions.
403 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
404 long_double_trig,
405 acosl asinl atanl \
406 cosl sinl tanl \
407 coshl sinhl tanhl)
408 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
409 long_double_round,
410 ceill floorl)
411 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
412 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
ff66d28f
PE
413 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
414 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
415 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
416 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
417 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
418 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
419 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
420 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
421 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
422 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
423 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
424 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
425 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
426 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
427
ff66d28f
PE
428 LIBS="$ac_save_LIBS"
429 CXXFLAGS="$ac_save_CXXFLAGS"
430])