Hi! These testcases were actually also fixed by the PR89520 fix (the ICE was during expansion, but only because convert.c made invalid transformation).
The following patch adds those to the testsuite so that we can close the PR, tested on x86_64-linux, committed to trunk as obvious. 2019-02-28 Jakub Jelinek <ja...@redhat.com> PR c/89521 * gcc.dg/pr89521-1.c: New test. * gcc.dg/pr89521-2.c: New test. --- gcc/testsuite/gcc.dg/pr89521-1.c.jj 2019-02-28 14:46:18.333843992 +0100 +++ gcc/testsuite/gcc.dg/pr89521-1.c 2019-02-28 14:46:42.268458231 +0100 @@ -0,0 +1,13 @@ +/* PR c/89521 */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -w" } */ + +#define A(name) __typeof (__builtin_##name (0)) name (); long name##1 () { return name (1); } +#define B(name) A(name) A(name##f) A(name##l) +B (ceil) +B (floor) +B (round) +B (trunc) +B (nearbyint) +B (rint) +B (logb) --- gcc/testsuite/gcc.dg/pr89521-2.c.jj 2019-02-28 14:46:21.517792675 +0100 +++ gcc/testsuite/gcc.dg/pr89521-2.c 2019-02-28 14:46:56.754224768 +0100 @@ -0,0 +1,42 @@ +/* PR c/89521 */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -w" } */ + +#define A(name) __typeof (__builtin_##name (0)) name (); \ + float name##1 () { return name (1); } \ + double name##2 () { return name (1); } +#define B(name) A(name) A(name##l) +B (cosh) +B (exp) +B (exp10) +B (exp2) +B (expm1) +B (gamma) +B (j0) +B (j1) +B (lgamma) +B (pow10) +B (sinh) +B (tgamma) +B (y0) +B (y1) +B (acos) +B (acosh) +B (asin) +B (asinh) +B (atan) +B (atanh) +B (cbrt) +B (cos) +B (erf) +B (erfc) +B (log) +B (log10) +B (log2) +B (log1p) +B (sin) +B (tan) +B (tanh) +B (sqrt) +B (fabs) +B (logb) Jakub