Hello world, the attached patch improves the rather hard to read error messages for argument mismatches. With this patch, this reads argument_checking_21.f90:7:11: 6 | call foo(1.0) ! { dg-warning "Rank mismatch" } | 2 7 | call foo(b) ! { dg-warning "Rank mismatch" } | 1 Fehler: Rank mismatch between actual argument at (1) and actual argument at (2) (scalar and rank-2) which I think is fairly clear. It also makes sure that warnings are always emitted by -fallow-argument-mismatch by removing -Wargument-mismatch. Finally, for people who do not want to have too many warnings cluttering up their logs, a type mismatch is only shown once if it is a warning. While I was going on about fixing warnings, I also fixed PR 91557 with the bit in trans-expr.c. This part is trivial, I will backport it to the other affected branches. After this, I think we can close PR 91556. Regression-tested. OK for trunk? 2019-09-13 Thomas Koenig PR fortran/91557 PR fortran/91556 * frontend-passes.c (check_externals_procedure): Reformat argument list. Use gfc_compare_actual_formal instead of gfc_procedure_use. * gfortran.h (gfc_symbol): Add flag error. * interface.c (gfc_compare_interfaces): Reformat. (argument_rank_mismatch): Add where_formal argument. If it is present, note that the error is between different calls. (compare_parameter): Change warnings that previously dependended on -Wargument-mismatch to unconditional. Issue an error / warning on type mismatch only once. Pass where_formal to argument_rank_mismatch for artificial variables. (compare_actual_formal): Change warnings that previously dependeded on -Wargument-mismatch to unconditional. (gfc_check_typebound_override): Likewise. (gfc_get_formal_from_actual_arglist): Set declared_at for artificial symbol. * invoke.texi: Extend description of -fallow-argument-mismatch. Delete -Wargument-mismatch. * lang.opt: Change -Wargument-mismatch to do-nothing option. * resolve.c (resolve_structure_cons): Change warnings that previously depended on -Wargument-mismatch to unconditional. * trans-decl.c (generate_local_decl): Do not warn if the symbol is artificial. 2019-09-13 Thomas Koenig PR fortran/91557 PR fortran/91556 * gfortran.dg/argument_checking_20.f90: New test. * gfortran.dg/argument_checking_21.f90: New test. * gfortran.dg/argument_checking_22.f90: New test. * gfortran.dg/argument_checking_23.f90: New test. * gfortran.dg/warn_unused_dummy_argument_5.f90: New test. * gfortran.dg/bessel_3.f90: Add pattern for type mismatch. * gfortran.dg/g77/20010519-1.f: Adjust dg-warning messages to new handling. * gfortran.dg/pr24823.f: Likewise. * gfortran.dg/pr39937.f: Likewise.