On Tue, Aug 10, 2021 at 04:14:15PM +0200, Richard Biener via Gcc-patches wrote: > OK, so gimple_builtin_call_types_compatible_p only checks that the > call is consistent with the fndecl type - iff the declaration is incompatible > with the declaration as specified by builtins.def then that's of course > not detected by that check (this check is to catch cases where a > formerly indirect call through an incompatible type is now known to > be to a builtin). > > IIRC that is a recurring issue and indeed my opinion is that frontends > should not mark function decls as BUILT_IN if the definition/declaration > signature is not compatible.
Different FEs use different strictness for what is or is not compatible. And we can't be too strict, because e.g. of FILE * arguments where the FILE type isn't pre-declared for the builtins. On severe mismatches I think the FEs already don't mark it built in (say double vs. int etc.), and e.g. const char * vs. char * differences should be allowed (e.g. consider C++ vs. C strchr). But perhaps we should consider as incompatible somethng that doesn't pass useless_type_conversion_p too... Jakub