This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][RFC] Add quotes for constexpr keyword.
- From: Martin Liška <mliska at suse dot cz>
- To: Martin Sebor <msebor at gmail dot com>, Jason Merrill <jason at redhat dot com>, Marek Polacek <polacek at redhat dot com>
- Cc: Jakub Jelinek <jakub at redhat dot com>, gcc-patches List <gcc-patches at gcc dot gnu dot org>, Jonathan Wakely <jwakely at redhat dot com>
- Date: Wed, 15 Nov 2017 13:45:36 +0100
- Subject: [PATCH][RFC] Add quotes for constexpr keyword.
- Authentication-results: sourceware.org; auth=none
- References: <31ddd79e-1152-9dd9-663b-acd8d1bcd4ab@suse.cz> <CADzB+2=fe6aDbFM3W3_=xog_VZh2iV1jR6dyBHEuu25-ttn5uw@mail.gmail.com> <a5543eb7-6774-a58a-38e7-33d3edf23fa2@suse.cz> <CADzB+2koi_th-P6S6=91NeA41LJoqPNk9GVWZP9Oq5PdQd6FtQ@mail.gmail.com> <a20e5418-a0af-d235-721b-9869c50f963a@suse.cz> <20171012084834.GS14653@tucnak> <451b4f3d-d858-bbc8-5d1f-6056af5963d3@suse.cz> <20171018125252.GC19284@redhat.com> <d6209c74-884e-8ad9-bcb4-2707a7d0d999@suse.cz> <99de094c-0e98-f2f2-39a9-a7394e0604ad@redhat.com> <0d484e7b-782b-7c4c-cdda-723efffe15a5@suse.cz> <7f78d1c7-ac2a-c43b-d0fb-9c09c70b65b2@gmail.com>
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 <mliska@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 <mliska@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