/* Test __builtin_tgmath: valid uses, _FloatN types. */ /* { dg-do run } */ /* { dg-options "" } */ /* { dg-add-options float32 } */ /* { dg-require-effective-target float32_runtime } */ extern void abort (void); extern void exit (int); #define CHECK_CALL(C, E, V) \ do \ { \ if ((C) != (E)) \ abort (); \ extern __typeof (C) V; \ } \ while (0) extern float var_f; extern double var_d; extern long double var_ld; extern _Float32 var_f32; float t1f (float x) { return x + 1; } double t1d (double x) { return x + 2; } long double t1l (long double x) { return x + 3; } _Float32 t1f32 (_Float32 x) { return x + 4; } #define t1v(x) __builtin_tgmath (t1f, t1d, t1l, t1f32, x) static void test_1 (void) { float f = 1; double d = 2; long double ld = 3; _Float32 f32 = 4; int i = 5; CHECK_CALL (t1v (f), 2, var_f); CHECK_CALL (t1v (d), 4, var_d); CHECK_CALL (t1v (ld), 6, var_ld); CHECK_CALL (t1v (f32), 8, var_f32); CHECK_CALL (t1v (i), 7, var_d); } int main (void) { test_1 (); exit (0); }