[Bug middle-end/123703] [13/14 Regression] ICE in fold_convert with a bad declaration of abs (return an union)
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Mar 15 06:06:38 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123703
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Jakub Jelinek
<jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:6a24a9826808e29ba53d901f3288ca505272d7d3
commit r14-12394-g6a24a9826808e29ba53d901f3288ca505272d7d3
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri Jan 23 10:37:46 2026 +0100
builtins: Only fold abs/absu if it is sane [PR123703]
To my surprise the C FE marks as builtin even a declaration which has
incorrect
return type. Normally gimple_builtin_call_types_compatible_p etc. will
just punt in cases where the return type is wrong, but builtins.cc doesn't
use that. For e.g. the mathfn builtins like sqrt and many others, it will
punt on weird return types, but for fold_builtin_abs it doesn't and happily
tests TYPE_UNSIGNED on it and fold_convert the integral operand to it etc.,
which ICEs if the return type is aggregate.
The following patch fixes it by punting if type is not integral.
2026-01-23 Jakub Jelinek <jakub@redhat.com>
PR middle-end/123703
* builtins.cc (fold_builtin_abs): Return NULL_TREE if type is not
integral.
* gcc.c-torture/compile/pr123703.c: New test.
(cherry picked from commit 0ba37a153fc86ca1ea9a243d6ea8c60e8de70e08)
More information about the Gcc-bugs
mailing list