https://gcc.gnu.org/g:8a6b30148d76cf88148622898f1db6c756b21dde
commit r14-10971-g8a6b30148d76cf88148622898f1db6c756b21dde Author: Gaius Mulley <gaiusm...@gmail.com> Date: Sat Nov 23 13:16:15 2024 +0000 [PATCH] PR modula2/115804 ICE during gimplification with new isfinite optab The calls to five m2 builtins have the incorrect return type. This was detected when adding isfinitedf2 optab to the s390 backend which results in ICEs during gimplification in the gm2 testsuite. gcc/m2/ChangeLog: PR modula2/115804 * gm2-gcc/m2builtins.cc (builtin_function_entry): Add GTY. (DoBuiltinMemCopy): Add rettype and use rettype in the call. (DoBuiltinAlloca): Ditto. (DoBuiltinIsfinite): Ditto. (DoBuiltinIsnan): Ditto. (m2builtins_BuiltInHugeVal): Ditto. (m2builtins_BuiltInHugeValShort): Ditto. (m2builtins_BuiltInHugeValLong): Ditto. Co-Authored-By: Stefan Schulze Frielinghaus <stefa...@linux.ibm.com> Co-Authored-By: Andrew Pinski <quic_apin...@quicinc.com> (cherry picked from commit 4594d555aa551a9998fc921363c5f6ea50630d5c) Signed-off-by: Gaius Mulley <gaiusm...@gmail.com> Diff: --- gcc/m2/gm2-gcc/m2builtins.cc | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/gcc/m2/gm2-gcc/m2builtins.cc b/gcc/m2/gm2-gcc/m2builtins.cc index cfb4751e15ae..31c344c4a59e 100644 --- a/gcc/m2/gm2-gcc/m2builtins.cc +++ b/gcc/m2/gm2-gcc/m2builtins.cc @@ -138,7 +138,7 @@ struct builtin_function_entry /* Entries are added by examining gcc/builtins.def and copying those functions which can be applied to Modula-2. */ -static struct builtin_function_entry list_of_builtins[] = { +static struct GTY(()) builtin_function_entry list_of_builtins[] = { { "__builtin_alloca", BT_FN_PTR_SIZE, BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca", NULL, NULL, bf_extension_lib }, { "__builtin_memcpy", BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE, BUILT_IN_MEMCPY, @@ -1007,10 +1007,11 @@ static tree DoBuiltinMemCopy (location_t location, tree dest, tree src, tree bytes) { tree functype = TREE_TYPE (gm2_memcpy_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_memcpy_node); tree call - = m2treelib_DoCall3 (location, ptr_type_node, funcptr, dest, src, bytes); + = m2treelib_DoCall3 (location, rettype, funcptr, dest, src, bytes); return call; } @@ -1018,10 +1019,10 @@ static tree DoBuiltinAlloca (location_t location, tree bytes) { tree functype = TREE_TYPE (gm2_alloca_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_alloca_node); - tree call = m2treelib_DoCall1 (location, ptr_type_node, funcptr, bytes); - + tree call = m2treelib_DoCall1 (location, rettype, funcptr, bytes); return call; } @@ -1029,10 +1030,10 @@ static tree DoBuiltinIsfinite (location_t location, tree value) { tree functype = TREE_TYPE (gm2_isfinite_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_isfinite_node); - tree call = m2treelib_DoCall1 (location, ptr_type_node, funcptr, value); - + tree call = m2treelib_DoCall1 (location, rettype, funcptr, value); return call; } @@ -1040,10 +1041,10 @@ static tree DoBuiltinIsnan (location_t location, tree value) { tree functype = TREE_TYPE (gm2_isnan_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_isnan_node); - tree call = m2treelib_DoCall1 (location, ptr_type_node, funcptr, value); - + tree call = m2treelib_DoCall1 (location, rettype, funcptr, value); return call; } @@ -1051,9 +1052,10 @@ tree m2builtins_BuiltInHugeVal (location_t location) { tree functype = TREE_TYPE (gm2_huge_val_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_huge_val_node); - tree call = m2treelib_DoCall0 (location, ptr_type_node, funcptr); + tree call = m2treelib_DoCall0 (location, rettype, funcptr); return call; } @@ -1061,9 +1063,10 @@ tree m2builtins_BuiltInHugeValShort (location_t location) { tree functype = TREE_TYPE (gm2_huge_valf_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_huge_valf_node); - tree call = m2treelib_DoCall0 (location, ptr_type_node, funcptr); + tree call = m2treelib_DoCall0 (location, rettype, funcptr); return call; } @@ -1071,9 +1074,10 @@ tree m2builtins_BuiltInHugeValLong (location_t location) { tree functype = TREE_TYPE (gm2_huge_vall_node); + tree rettype = TREE_TYPE (functype); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), gm2_huge_vall_node); - tree call = m2treelib_DoCall0 (location, ptr_type_node, funcptr); + tree call = m2treelib_DoCall0 (location, rettype, funcptr); return call; }