1 /* Test for builtin abs, labs, llabs, imaxabs. */
2 /* Origin: Joseph Myers <jsm28@cam.ac.uk> */
4 /* These next definitions are kludges. When GCC has a <stdint.h> it
8 #if INT_MAX == __LONG_LONG_MAX__
10 #define INTMAX_MAX INT_MAX
11 #elif LONG_MAX == __LONG_LONG_MAX__
12 typedef long intmax_t;
13 #define INTMAX_MAX LONG_MAX
15 typedef long long intmax_t;
16 #define INTMAX_MAX __LONG_LONG_MAX__
20 extern long labs (long);
21 extern long long llabs (long long);
22 extern intmax_t imaxabs (intmax_t);
23 extern void abort (void);
24 extern void exit (int);
26 extern void link_failure (void);
31 /* For each type, test both runtime and compile time (constant folding)
33 volatile int i0
= 0, i1
= 1, im1
= -1, imin
= -INT_MAX
, imax
= INT_MAX
;
34 volatile long l0
= 0L, l1
= 1L, lm1
= -1L, lmin
= -LONG_MAX
, lmax
= LONG_MAX
;
35 volatile long long ll0
= 0LL, ll1
= 1LL, llm1
= -1LL;
36 volatile long long llmin
= -__LONG_LONG_MAX__
, llmax
= __LONG_LONG_MAX__
;
37 volatile intmax_t imax0
= 0, imax1
= 1, imaxm1
= -1;
38 volatile intmax_t imaxmin
= -INTMAX_MAX
, imaxmax
= INTMAX_MAX
;
51 if (abs (imin
) != INT_MAX
)
53 if (abs (-INT_MAX
) != INT_MAX
)
55 if (abs (imax
) != INT_MAX
)
57 if (abs (INT_MAX
) != INT_MAX
)
71 if (labs (lmin
) != LONG_MAX
)
73 if (labs (-LONG_MAX
) != LONG_MAX
)
75 if (labs (lmax
) != LONG_MAX
)
77 if (labs (LONG_MAX
) != LONG_MAX
)
79 if (llabs (ll0
) != 0LL)
81 if (llabs (0LL) != 0LL)
83 if (llabs (ll1
) != 1LL)
85 if (llabs (1LL) != 1LL)
87 if (llabs (llm1
) != 1LL)
89 if (llabs (-1LL) != 1LL)
91 if (llabs (llmin
) != __LONG_LONG_MAX__
)
93 if (llabs (-__LONG_LONG_MAX__
) != __LONG_LONG_MAX__
)
95 if (llabs (llmax
) != __LONG_LONG_MAX__
)
97 if (llabs (__LONG_LONG_MAX__
) != __LONG_LONG_MAX__
)
99 if (imaxabs (imax0
) != 0)
101 if (imaxabs (0) != 0)
103 if (imaxabs (imax1
) != 1)
105 if (imaxabs (1) != 1)
107 if (imaxabs (imaxm1
) != 1)
109 if (imaxabs (-1) != 1)
111 if (imaxabs (imaxmin
) != INTMAX_MAX
)
113 if (imaxabs (-INTMAX_MAX
) != INTMAX_MAX
)
115 if (imaxabs (imaxmax
) != INTMAX_MAX
)
117 if (imaxabs (INTMAX_MAX
) != INTMAX_MAX
)
122 /* All the above cases should have been optimized to something else,
123 even if not optimizing (unless -fno-builtin was specified). So any
124 remaining calls to the original functions should abort. */
150 /* When optimizing, all the constant cases should have been
151 constant folded, so no calls to link_failure should remain. In any case,
152 link_failure should not be called. */