https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87188

--- Comment #24 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 12 Sep 2018, dave.anglin at bell dot net wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87188
> 
> --- Comment #23 from dave.anglin at bell dot net ---
> On 2018-09-12 4:03 AM, rguenth at gcc dot gnu.org wrote:
> > --- Comment #22 from Richard Biener <rguenth at gcc dot gnu.org> ---
> > (In reply to dave.anglin from comment #21)
> >> On 2018-09-09 2:46 PM, rguenther at suse dot de wrote:
> >>> In the last patch you replace arg0 || arg1 with arg0 & & arg1, that looks
> >>> wrong. Otherwise the patch looks OK.
> >> It was intentional.  See the comment in dojump.c:
> >>
> >>     /* If function pointers need to be "canonicalized" before they can
> >>        be reliably compared, then canonicalize them.
> >>        Only do this if*both*  sides of the comparison are function 
> >> pointers.
> >>        If one side isn't, we want a noncanonicalized comparison.  See PR
> >>        middle-end/17564.  */
> >>     if (targetm.have_canonicalize_funcptr_for_compare ()
> >>         && POINTER_TYPE_P (TREE_TYPE (treeop0))
> >>         && POINTER_TYPE_P (TREE_TYPE (treeop1))
> >>         && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (treeop0)))
> >>         && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (treeop1))))
> >>
> >> Based on this, I thought that we could allow do_store_flag to output a
> >> "scc" instruction
> >> when both sides weren't function or method pointers.
> > Ah, I see.
> Based on my testing, when we have a function or method pointer for one 
> of the operands,  the other
> operand is either a function, method or void pointer.  An implicit cast 
> occurs if one compares a function
> pointer to say an int or int*.  Of course, a warning is generated in 
> that case.  So, we want to canonicalize
> when one of the operands is a function or method pointer.  This 
> canonicalizes comparisons of a function
> pointer and a void pointer.
> 
> Attached is latest patch.

LGTM.

Reply via email to