diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2018-09-14 23:26:12 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2018-09-14 23:26:12 +0000 |
commit | f3743e2e32432a1d961c81097db3f755fd2dae76 (patch) | |
tree | 408d2c467782ee84c4590e65b055f6b0cb4fbc1a /gcc/expr.c | |
parent | 07f879058339c496273c9960562c3fdad317001a (diff) | |
download | gcc-f3743e2e32432a1d961c81097db3f755fd2dae76.zip gcc-f3743e2e32432a1d961c81097db3f755fd2dae76.tar.gz gcc-f3743e2e32432a1d961c81097db3f755fd2dae76.tar.bz2 |
re PR middle-end/87188 (Function pointer canonicalization optimized away)
PR middle-end/87188
* dojump.c (do_compare_and_jump): Canonicalize function pointers
when one operand is a function pointer. Use POINTER_TYPE_P and
FUNC_OR_METHOD_TYPE_P.
* expr.c (do_store_flag): Use POINTER_TYPE_P and FUNC_OR_METHOD_TYPE_P.
* fold-const.c (build_range_check): Likewise.
* match.pd (simple_comparison): Likewise.
From-SVN: r264336
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 10 |
1 files changed, 4 insertions, 6 deletions
@@ -11842,12 +11842,10 @@ do_store_flag (sepops ops, rtx target, machine_mode mode) /* We won't bother with store-flag operations involving function pointers when function pointers must be canonicalized before comparisons. */ if (targetm.have_canonicalize_funcptr_for_compare () - && ((TREE_CODE (TREE_TYPE (arg0)) == POINTER_TYPE - && (TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) - == FUNCTION_TYPE)) - || (TREE_CODE (TREE_TYPE (arg1)) == POINTER_TYPE - && (TREE_CODE (TREE_TYPE (TREE_TYPE (arg1))) - == FUNCTION_TYPE)))) + && ((POINTER_TYPE_P (TREE_TYPE (arg0)) + && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (arg0)))) + || (POINTER_TYPE_P (TREE_TYPE (arg1)) + && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (arg1)))))) return 0; STRIP_NOPS (arg0); |