From 4594d555aa551a9998fc921363c5f6ea50630d5c Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Sun, 7 Jul 2024 22:42:51 +0100 Subject: [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 <stefansf@linux.ibm.com> Co-Authored-By: Andrew Pinski <quic_apinski@quicinc.com> Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- 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; } -- GitLab