We preserve those casts to eventually be able to canonicalize
function pointer operands in comparisons via the
canonicalize_funcptr_for_compare named pattern which is
only implemented for hppa. The following elides this after
exposing the canonicalization in the IL with the earlier patch.
* gimple-expr.cc (useless_type_conversion_p): Do not
preserve casts to function pointer types.
* tree-cfg.cc (verify_gimple_call): Allow any pointer
type as function pointer argument on calls.
---
gcc/gimple-expr.cc | 4 ----
gcc/tree-cfg.cc | 7 ++-----
2 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/gcc/gimple-expr.cc b/gcc/gimple-expr.cc
index 3b8726ded4d..32a7b75d205 100644
--- a/gcc/gimple-expr.cc
+++ b/gcc/gimple-expr.cc
@@ -75,10 +75,6 @@ useless_type_conversion_p (tree outer_type, tree inner_type)
if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
!= TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
return false;
- /* Do not lose casts to function pointer types. */
- if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (outer_type))
- && !FUNC_OR_METHOD_TYPE_P (TREE_TYPE (inner_type)))
- return false;
}
/* From now on qualifiers on value types do not matter. */
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index ba1d4a125ad..c7f2f987b25 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -3373,12 +3373,9 @@ verify_gimple_call (gcall *stmt)
return true;
}
- if (fn
- && (!POINTER_TYPE_P (TREE_TYPE (fn))
- || (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE
- && TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != METHOD_TYPE)))
+ if (fn && !POINTER_TYPE_P (TREE_TYPE (fn)))
{
- error ("non-function in gimple call");
+ error ("non-pointer in gimple call");
return true;
}
--
2.51.0