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. jeff