On 11/06/2017 07:29 PM, Martin Sebor wrote: > Sorry for being late with my comment. I just spotted this minor > formatting issue. Even though GCC isn't (yet) consistent about > it the keyword "constexpr" should be quoted in the error message > below (and, eventually, in all diagnostic messages). Since the > patch has been committed by now this is just a reminder for us > to try to keep this in mind in the future.
Hi. I've prepared patch for that. If it's desired, I can fix test-suite follow-up. Do we want to change it also for error messages like: "call to non-constexpr function" "constexpr call flows off the end of the function" Thanks, Martin
>From eb554d8778be239a2edb06d21f98bda7e5153765 Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Wed, 15 Nov 2017 08:41:12 +0100 Subject: [PATCH] Add quotes for constexpr keyword. gcc/cp/ChangeLog: 2017-11-15 Martin Liska <mli...@suse.cz> * class.c (finalize_literal_type_property): Add quotes for constexpr keyword. (explain_non_literal_class): Likewise. * constexpr.c (ensure_literal_type_for_constexpr_object): Likewise. (is_valid_constexpr_fn): Likewise. (check_constexpr_ctor_body): Likewise. (register_constexpr_fundef): Likewise. (explain_invalid_constexpr_fn): Likewise. (cxx_eval_builtin_function_call): Likewise. (cxx_eval_call_expression): Likewise. (cxx_eval_loop_expr): Likewise. (potential_constant_expression_1): Likewise. * decl.c (check_previous_goto_1): Likewise. (check_goto): Likewise. (grokfndecl): Likewise. (grokdeclarator): Likewise. * error.c (maybe_print_constexpr_context): Likewise. * method.c (process_subob_fn): Likewise. (defaulted_late_check): Likewise. * parser.c (cp_parser_compound_statement): Likewise. --- gcc/cp/class.c | 4 ++-- gcc/cp/constexpr.c | 35 ++++++++++++++++++----------------- gcc/cp/decl.c | 12 ++++++------ gcc/cp/error.c | 4 ++-- gcc/cp/method.c | 6 +++--- gcc/cp/parser.c | 2 +- 6 files changed, 32 insertions(+), 31 deletions(-) diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 586a32c436f..529f37f24ee 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5368,7 +5368,7 @@ finalize_literal_type_property (tree t) DECL_DECLARED_CONSTEXPR_P (fn) = false; if (!DECL_GENERATED_P (fn) && pedwarn (DECL_SOURCE_LOCATION (fn), OPT_Wpedantic, - "enclosing class of constexpr non-static member " + "enclosing class of %<constexpr%> non-static member " "function %q+#D is not a literal type", fn)) explain_non_literal_class (t); } @@ -5406,7 +5406,7 @@ explain_non_literal_class (tree t) { inform (UNKNOWN_LOCATION, " %q+T is not an aggregate, does not have a trivial " - "default constructor, and has no constexpr constructor that " + "default constructor, and has no %<constexpr%> constructor that " "is not a copy or move constructor", t); if (type_has_non_user_provided_default_constructor (t)) /* Note that we can't simply call locate_ctor because when the diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index d6b6843e804..e0a4133d89b 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -94,8 +94,8 @@ ensure_literal_type_for_constexpr_object (tree decl) { if (DECL_DECLARED_CONSTEXPR_P (decl)) { - error ("the type %qT of constexpr variable %qD is not literal", - type, decl); + error ("the type %qT of %<constexpr%> variable %qD " + "is not literal", type, decl); explain_non_literal_class (type); } else @@ -177,7 +177,7 @@ is_valid_constexpr_fn (tree fun, bool complain) { ret = false; if (complain) - error ("inherited constructor %qD is not constexpr", + error ("inherited constructor %qD is not %<constexpr%>", DECL_INHERITED_CTOR (fun)); } else @@ -189,7 +189,7 @@ is_valid_constexpr_fn (tree fun, bool complain) ret = false; if (complain) { - error ("invalid type for parameter %d of constexpr " + error ("invalid type for parameter %d of %<constexpr%> " "function %q+#D", DECL_PARM_INDEX (parm), fun); explain_non_literal_class (TREE_TYPE (parm)); } @@ -201,7 +201,7 @@ is_valid_constexpr_fn (tree fun, bool complain) ret = false; if (complain) inform (DECL_SOURCE_LOCATION (fun), - "lambdas are implicitly constexpr only in C++17 and later"); + "lambdas are implicitly %<constexpr%> only in C++17 and later"); } else if (!DECL_CONSTRUCTOR_P (fun)) { @@ -211,7 +211,7 @@ is_valid_constexpr_fn (tree fun, bool complain) ret = false; if (complain) { - error ("invalid return type %qT of constexpr function %q+D", + error ("invalid return type %qT of %<constexpr%> function %q+D", rettype, fun); explain_non_literal_class (rettype); } @@ -225,7 +225,7 @@ is_valid_constexpr_fn (tree fun, bool complain) ret = false; if (complain && pedwarn (DECL_SOURCE_LOCATION (fun), OPT_Wpedantic, - "enclosing class of constexpr non-static member " + "enclosing class of %<constexpr%> non-static member " "function %q+#D is not a literal type", fun)) explain_non_literal_class (DECL_CONTEXT (fun)); } @@ -494,7 +494,7 @@ check_constexpr_ctor_body (tree last, tree list, bool complain) if (!ok) { if (complain) - error ("constexpr constructor does not have empty body"); + error ("%<constexpr%> constructor does not have empty body"); DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false; } return ok; @@ -845,7 +845,8 @@ register_constexpr_fundef (tree fun, tree body) if (massaged == NULL_TREE || massaged == error_mark_node) { if (!DECL_CONSTRUCTOR_P (fun)) - error ("body of constexpr function %qD not a return-statement", fun); + error ("body of %<constexpr%> function %qD not a return-statement", + fun); return NULL; } @@ -905,7 +906,7 @@ explain_invalid_constexpr_fn (tree fun) input_location set to our caller's location. */ input_location = DECL_SOURCE_LOCATION (fun); inform (input_location, - "%qD is not usable as a constexpr function because:", fun); + "%qD is not usable as a %<constexpr%> function because:", fun); } /* First check the declaration. */ if (is_valid_constexpr_fn (fun, true)) @@ -1194,7 +1195,7 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun, comes from cp_maybe_instrument_return. */ if (DECL_FUNCTION_CODE (fun) == BUILT_IN_UNREACHABLE && EXPR_LOCATION (t) == BUILTINS_LOCATION) - error ("constexpr call flows off the end of the function"); + error ("%<constexpr%> call flows off the end of the function"); else { new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t), @@ -1465,7 +1466,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, if (TREE_CODE (fun) != FUNCTION_DECL) { if (!ctx->quiet && !*non_constant_p) - error_at (loc, "expression %qE does not designate a constexpr " + error_at (loc, "expression %qE does not designate a %<constexpr%> " "function", fun); *non_constant_p = true; return t; @@ -1484,7 +1485,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, if (!ctx->quiet) { if (!lambda_static_thunk_p (fun)) - error_at (loc, "call to non-constexpr function %qD", fun); + error_at (loc, "call to non-%<constexpr%> function %qD", fun); explain_invalid_constexpr_fn (fun); } *non_constant_p = true; @@ -1618,7 +1619,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, if (!depth_ok) { if (!ctx->quiet) - error ("constexpr evaluation depth exceeds maximum of %d (use " + error ("%<constexpr%> evaluation depth exceeds maximum of %d (use " "-fconstexpr-depth= to increase the maximum)", max_constexpr_depth); *non_constant_p = true; @@ -1701,7 +1702,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, if (result == NULL_TREE && !*non_constant_p) { if (!ctx->quiet) - error ("constexpr call flows off the end " + error ("%<constexpr%> call flows off the end " "of the function"); *non_constant_p = true; } @@ -3847,7 +3848,7 @@ cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t, { if (!ctx->quiet) error_at (EXPR_LOC_OR_LOC (t, input_location), - "constexpr loop iteration count exceeds limit of %d " + "%<constexpr%> loop iteration count exceeds limit of %d " "(use -fconstexpr-loop-limit= to increase the limit)", constexpr_loop_limit); *non_constant_p = true; @@ -5214,7 +5215,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, { if (flags & tf_error) { - error_at (loc, "call to non-constexpr function %qD", + error_at (loc, "call to non-%<constexpr%> function %qD", fun); explain_invalid_constexpr_fn (fun); } diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 041893db937..77103ae5b03 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3180,7 +3180,7 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, case sk_block: if (!saw_cxif && level_for_constexpr_if (b->level_chain)) { - inf = N_("enters constexpr if statement"); + inf = N_("enters %<constexpr%> if statement"); loc = EXPR_LOCATION (b->level_chain->this_entity); saw_cxif = true; } @@ -3315,7 +3315,7 @@ check_goto (tree decl) else if (ent->in_transaction_scope) inform (input_location, " enters synchronized or atomic statement"); else if (ent->in_constexpr_if) - inform (input_location, " enters constexpr if statement"); + inform (input_location, " enters %<constexpr%> if statement"); } if (ent->in_omp_scope) @@ -8606,7 +8606,7 @@ grokfndecl (tree ctype, if (inlinep & 1) error ("cannot declare %<::main%> to be inline"); if (inlinep & 2) - error ("cannot declare %<::main%> to be constexpr"); + error ("cannot declare %<::main%> to be %<constexpr%>"); if (!publicp) error ("cannot declare %<::main%> to be static"); inlinep = 0; @@ -12050,7 +12050,7 @@ grokdeclarator (const cp_declarator *declarator, unqualified_id); else if (constexpr_p && !initialized) { - error ("constexpr static data member %qD must have an " + error ("%<constexpr%> static data member %qD must have an " "initializer", decl); constexpr_p = false; } @@ -12278,8 +12278,8 @@ grokdeclarator (const cp_declarator *declarator, } else if (constexpr_p && DECL_EXTERNAL (decl)) { - error ("declaration of constexpr variable %qD is not a definition", - decl); + error ("declaration of %<constexpr%> variable %qD " + "is not a definition", decl); constexpr_p = false; } diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 2537713b5c9..5c78f76db07 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -3584,11 +3584,11 @@ maybe_print_constexpr_context (diagnostic_context *context) const char *s = expr_as_string (t, 0); if (context->show_column) pp_verbatim (context->printer, - _("%r%s:%d:%d:%R in constexpr expansion of %qs"), + _("%r%s:%d:%d:%R in %<constexpr%> expansion of %qs"), "locus", xloc.file, xloc.line, xloc.column, s); else pp_verbatim (context->printer, - _("%r%s:%d:%R in constexpr expansion of %qs"), + _("%r%s:%d:%R in %<constexpr%> expansion of %qs"), "locus", xloc.file, xloc.line, s); pp_newline (context->printer); } diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 714b5087991..534aaa32fd5 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1293,7 +1293,7 @@ process_subob_fn (tree fn, tree *spec_p, bool *trivial_p, if (diag) { inform (DECL_SOURCE_LOCATION (fn), - "defaulted constructor calls non-constexpr %qD", fn); + "defaulted constructor calls non-%<constexpr%> %qD", fn); explain_invalid_constexpr_fn (fn); } } @@ -2257,8 +2257,8 @@ defaulted_late_check (tree fn) if (!CLASSTYPE_TEMPLATE_INSTANTIATION (ctx)) { error ("explicitly defaulted function %q+D cannot be declared " - "as constexpr because the implicit declaration is not " - "constexpr:", fn); + "as %<constexpr%> because the implicit declaration is not " + "%<constexpr%>:", fn); explain_implicit_non_constexpr (fn); } DECL_DECLARED_CONSTEXPR_P (fn) = false; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 1860bf0f175..6c132da49ee 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11292,7 +11292,7 @@ cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr, if (DECL_DECLARED_CONSTEXPR_P (current_function_decl) && !function_body && cxx_dialect < cxx14) pedwarn (input_location, OPT_Wpedantic, - "compound-statement in constexpr function"); + "compound-statement in %<constexpr%> function"); /* Begin the compound-statement. */ compound_stmt = begin_compound_stmt (bcs_flags); /* If the next keyword is `__label__' we have a label declaration. */ -- 2.14.3