On Thu, Mar 14, 2019 at 12:50:28AM +0000, Joseph Myers wrote:
> > The C FE sadly passes through some really bad prototypes of builtin
> > functions as "harmless":
> >           /* Accept "harmless" mismatches in function types such
> >              as missing qualifiers or pointer vs same size integer
> >              mismatches.  This is for the ffs and fprintf builtins.
> >              However, with -Wextra in effect, diagnose return and
> >              argument types that are incompatible according to
> >              language rules.  */
> 
> Note that this isn't just about pre-standard headers with unexpected types 
> (if it were, it might be obsolete).  It's also needed for building glibc 
> (to build glibc with -Wextra with GCC trunk, one of the -Wno- options 
> needed is -Wno-builtin-declaration-mismatch), because of how various code 
> creates function aliases between functions that have the same ABI but 
> different types (long versus int, etc.).

I was mainly woried about the pointer vs same sized integer mismatches.
Seems we refuse them on arguments:
      /* Fail for types with incompatible modes/sizes.  */
      if (TYPE_MODE (TREE_VALUE (oldargs))
          != TYPE_MODE (TREE_VALUE (newargs)))
        return NULL_TREE;
      /* Fail for function and object pointer mismatches.  */
      if ((FUNCTION_POINTER_TYPE_P (oldtype)
           != FUNCTION_POINTER_TYPE_P (newtype))
          || POINTER_TYPE_P (oldtype) != POINTER_TYPE_P (newtype))
        return NULL_TREE;
but not on the return type, where there is just:
  if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
    return NULL_TREE;
Whether a builtin returns a pointer or integer is at least for the
middle-end quite important difference, so I'm just surprised more bugs in
other passes haven't been filed yet.  I can deal with that in the
tree-ssa-strlen.c pass with the patch I've posted, just am worried about
potential issues elsewhere.

        Jakub

Reply via email to