On 11/15/2018 03:10 AM, Richard Biener wrote:
On Wed, Nov 14, 2018 at 7:08 PM Jeff Law <l...@redhat.com> wrote:

On 11/6/18 4:56 PM, Martin Sebor wrote:
In response to Joseph's comment I've removed the interaction
with -Wpedantic from the updated patch.

In addition, to help detect bugs like the one in the test case
for pr87886, I have also enhanced the detection of incompatible
calls to include integer/real type mismatches so that calls like
the one below are diagnosed:

  extern double sqrt ();
  int f (int x)
  {
    return sqrt (x);   // passing int where double is expected
  }

With the removal of the -Wpedantic interaction declaring abort()
without a prototype is no longer diagnosed and so the test suite
changes to add the prototype are not necessary.  I decided not
to back them out because Jeff indicated a preference for making
these kinds of improvements in general in an unrelated
discussion.



gcc-83656.diff

PR c/83656 - missing -Wbuiltin-declaration-mismatch on declaration without 
prototype

gcc/c/ChangeLog:

      PR c/83656
      * c-decl.c (header_for_builtin_fn): Declare.
      (diagnose_mismatched_decls): Diagnose declarations of built-in
      functions without a prototype.
      * c-typeck.c (maybe_warn_builtin_no_proto_arg): New function.
      (convert_argument): Same.
      (convert_arguments): Factor code out into convert_argument.
      Detect mismatches between built-in formal arguments in calls
      to built-in without prototype.
      (build_conditional_expr): Same.
      (type_or_builtin_type): New function.
      (convert_for_assignment): Add argument.  Conditionally issue
      warnings instead of errors for mismatches.

gcc/testsuite/ChangeLog:

      PR c/83656
      * gcc.dg/20021006-1.c
      * gcc.dg/Wbuiltin-declaration-mismatch.c: New test.
      * gcc.dg/Wbuiltin-declaration-mismatch-2.c: New test.
      * gcc.dg/Wbuiltin-declaration-mismatch-3.c: New test.
      * gcc.dg/Wbuiltin-declaration-mismatch-4.c: New test.
      * gcc.dg/Walloca-16.c: Adjust.
      * gcc.dg/Wrestrict-4.c: Adjust.
      * gcc.dg/Wrestrict-5.c: Adjust.
      * gcc.dg/atomic/stdatomic-generic.c: Adjust.
      * gcc.dg/atomic/stdatomic-lockfree.c: Adjust.
      * gcc.dg/initpri1.c: Adjust.
      * gcc.dg/pr15698-1.c: Adjust.
      * gcc.dg/pr69156.c: Adjust.
      * gcc.dg/pr83463.c: Adjust.
      * gcc.dg/redecl-4.c: Adjust.
      * gcc.dg/tls/thr-init-2.c: Adjust.
      * gcc.dg/torture/pr55890-2.c: Adjust.
      * gcc.dg/torture/pr55890-3.c: Adjust.
      * gcc.dg/torture/pr67741.c: Adjust.
      * gcc.dg/torture/stackalign/sibcall-1.c: Adjust.
      * gcc.dg/torture/tls/thr-init-1.c: Adjust.
      * gcc.dg/tree-ssa/builtins-folding-gimple-ub.c: Adjust.



@@ -3547,8 +3598,24 @@ convert_arguments (location_t loc, vec<location_t> 
arg_loc, tree typelist,
       if (parmval == error_mark_node)
      error_args = true;

+      if (!type && builtin_type && TREE_CODE (builtin_type) != VOID_TYPE)
+     {
+       /* For a call to a built-in function declared without a prototype,
+          perform the coversions from the argument to the expected type
+          but issue warnings rather than errors for any mismatches.
+          Ignore the converted argument and use the PARMVAL obtained
+          above by applying default coversions instead.  */
s/coversions/conversions/

Two of 'em in that comment.  OK with that nit fixed.

I once had -Wunprototyped-calls...  (attached).  Because the issue doesn't
exist only for builtins... (originally inspired by a Xorg bug)

You're right, thanks for the suggestion.  I'm still planning to
resubmit the patch I posted last June to enable -Wstrict-prototypes
(PR 82922).  Detecting this problem there would be a good enhancement.
If it's too late to do this for GCC 9 I will submit the patch for GCC
10.

Martin

Reply via email to