This patch replaces some of the '%s' quotes of diagnostic strings by the nicer quotes.
First, it replaces some leftovers of '%s' -> %qs in directly used error strings. It then also converts some (well: resolve.c only) '%s' to %%<%s%%>, which are using with sprintf(), but which are still passed as fmt string to the diagnostic functions. There is still code using '%s' - but those bits have the form sprintf (buffer, ".... '%s' ... "); gfc_error ("Bla ... : %s", ..., buffer); which prevents the use of %< ... %>. (See last comment in the PR.) In principle, %<%c%> and %<%d%> should be convertable to %qc and %qd (as the code is more readable), but the current function annotation prevent this, telling that the q flag is not valid for %c and %d. As %< is fine, I didn't dig into it. Build and regtested on x86-64-gnu-linux. OK for the trunk? Tobias
PR fortran/68815 * decl.c (gfc_verify_c_interop_param, variable_decl): Use %< ... %> for quoting in diagnostics. * io.c (check_format): Ditto. * resolve.c (resolve_operator): Ditto. * symbol.c (check_conflict): Ditto. * trans-common.c (translate_common): Ditto. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index bff23e1..b03dadf 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1194,7 +1194,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym) if (sym->as != NULL && sym->as->type == AS_ASSUMED_SHAPE && !gfc_notify_std (GFC_STD_F2008_TS, "Assumed-shape array %qs " "at %L as dummy argument to the BIND(C) " - "procedure '%s' at %L", sym->name, + "procedure %qs at %L", sym->name, &(sym->declared_at), sym->ns->proc_name->name, &(sym->ns->proc_name->declared_at))) @@ -2023,9 +2023,9 @@ variable_decl (int elem) if (sym != NULL && (sym->attr.dummy || sym->attr.result)) { m = MATCH_ERROR; - gfc_error ("'%s' at %C is a redefinition of the declaration " + gfc_error ("%qs at %C is a redefinition of the declaration " "in the corresponding interface for MODULE " - "PROCEDURE '%s'", sym->name, + "PROCEDURE %qs", sym->name, gfc_current_ns->proc_name->name); goto cleanup; } diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 8cf952f..9a77234 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -549,7 +549,7 @@ check_format (bool is_input) { const char *posint_required = _("Positive width required"); const char *nonneg_required = _("Nonnegative width required"); - const char *unexpected_element = _("Unexpected element %<%c%> in format " + const char *unexpected_element = _("Unexpected element %qc in format " "string at %L"); const char *unexpected_end = _("Unexpected end of format string"); const char *zero_width = _("Zero width in format descriptor"); diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 10add62..65a2b7f 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3560,7 +3560,7 @@ resolve_operator (gfc_expr *e) break; } - sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"), + sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"), gfc_op2string (e->value.op.op), gfc_typename (&e->ts)); goto bad_op; @@ -3576,7 +3576,7 @@ resolve_operator (gfc_expr *e) } sprintf (msg, - _("Operands of binary numeric operator '%s' at %%L are %s/%s"), + _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"), gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), gfc_typename (&op2->ts)); goto bad_op; @@ -3610,7 +3610,7 @@ resolve_operator (gfc_expr *e) break; } - sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"), + sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"), gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), gfc_typename (&op2->ts)); @@ -3695,7 +3695,7 @@ resolve_operator (gfc_expr *e) ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op)); else sprintf (msg, - _("Operands of comparison operator '%s' at %%L are %s/%s"), + _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"), gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), gfc_typename (&op2->ts)); @@ -3703,13 +3703,14 @@ resolve_operator (gfc_expr *e) case INTRINSIC_USER: if (e->value.op.uop->op == NULL) - sprintf (msg, _("Unknown operator '%s' at %%L"), e->value.op.uop->name); + sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), + e->value.op.uop->name); else if (op2 == NULL) - sprintf (msg, _("Operand of user operator '%s' at %%L is %s"), + sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"), e->value.op.uop->name, gfc_typename (&op1->ts)); else { - sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"), + sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"), e->value.op.uop->name, gfc_typename (&op1->ts), gfc_typename (&op2->ts)); e->value.op.uop->op->sym->attr.referenced = 1; diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index ff9aff9..311f743 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -465,7 +465,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where) if (attr->dummy && ((attr->function || attr->subroutine) && gfc_current_state () == COMP_CONTAINS)) - gfc_error_now ("internal procedure '%s' at %L conflicts with " + gfc_error_now ("internal procedure %qs at %L conflicts with " "DUMMY argument", name, where); conf (dummy, entry); diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c index af9fadf..bbbc726 100644 --- a/gcc/fortran/trans-common.c +++ b/gcc/fortran/trans-common.c @@ -1166,7 +1166,7 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list) if (common_segment == NULL) { - gfc_error ("COMMON '%s' at %L does not exist", + gfc_error ("COMMON %qs at %L does not exist", common->name, &common->where); return; }