diff options
author | Martin Sebor <msebor@redhat.com> | 2019-05-17 17:55:43 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2019-05-17 11:55:43 -0600 |
commit | a9c697b88395a0f2b175ac30c59bd8c0c22d0db1 (patch) | |
tree | 824792abb43c3e017801b6e124f310ffffc36c17 /gcc/cp | |
parent | 6df6f67a283c62f0590d88b39d309b2c37cd7de1 (diff) | |
download | gcc-a9c697b88395a0f2b175ac30c59bd8c0c22d0db1.zip gcc-a9c697b88395a0f2b175ac30c59bd8c0c22d0db1.tar.gz gcc-a9c697b88395a0f2b175ac30c59bd8c0c22d0db1.tar.bz2 |
trans.c (check_inlining_for_nested_subprog): Quote reserved names.
gcc/ada/ChangeLog:
* gcc-interface/trans.c (check_inlining_for_nested_subprog): Quote
reserved names.
gcc/brig/ChangeLog:
* brigfrontend/brig-control-handler.cc
(brig_directive_control_handler::operator): Remove trailing newline
from a diagnostic.
* brigfrontend/brig-module-handler.cc
(brig_directive_module_handler::operator): Remove a duplicated space
from a diagnostic.
gcc/c/ChangeLog:
* c-decl.c (start_decl): Quote keywords, operators, and
types in diagnostics.
(finish_decl): Same.
* c-parser.c (c_parser_asm_statement): Same.
(c_parser_conditional_expression): Same.
(c_parser_transaction_cancel): Same.
* c-typeck.c (c_common_type): Same.
(build_conditional_expr): Same.
(digest_init): Same.
(process_init_element): Same.
(build_binary_op): Same.
gcc/c-family/ChangeLog:
* c-attribs.c (handle_no_sanitize_attribute): Quote identifiers,
keywords, operators, and types in diagnostics.
(handle_scalar_storage_order_attribute): Same.
(handle_mode_attribute): Same.
(handle_visibility_attribute): Same.
(handle_assume_aligned_attribute): Same.
(handle_no_split_stack_attribute): Same.
* c-common.c (shorten_compare): Same.
(c_common_truthvalue_conversion): Same.
(cb_get_source_date_epoch): Same.
* c-lex.c (cb_def_pragma): Quote keywords, operators, and types
in diagnostics.
(interpret_float): Same.
* c-omp.c (c_finish_omp_for): Same.
* c-opts.c (c_common_post_options): Same.
* c-pch.c (c_common_pch_pragma): Same.
* c-pragma.c (pop_alignment): Same.
(handle_pragma_pack): Same.
(apply_pragma_weak): Same.
(handle_pragma_weak): Same.
(handle_pragma_scalar_storage_order): Same.
(handle_pragma_redefine_extname): Same.
(add_to_renaming_pragma_list): Same.
(maybe_apply_renaming_pragma): Same.
(push_visibility): Same.
(handle_pragma_visibility): Same.
(handle_pragma_optimize): Same.
(handle_pragma_message): Same.
* c-warn.c (warn_for_omitted_condop): Same.
(lvalue_error): Same.
gcc/cp/ChangeLog:
* call.c (print_z_candidate): Wrap diagnostic text in a gettext
macro. Adjust.
(print_z_candidates): Same.
(build_conditional_expr_1): Quote keywords, operators, and types
in diagnostics.
(build_op_delete_call): Same.
(maybe_print_user_conv_context): Wrap diagnostic text in a gettext
macro.
(convert_like_real): Same.
(convert_arg_to_ellipsis): Quote keywords, operators, and types
in diagnostics.
(build_over_call): Same.
(joust): Break up an overlong line. Wrap diagnostic text in a gettext
macro.
* constexpr.c (cxx_eval_check_shift_p): Spell out >= in English.
(cxx_eval_constant_expression): Quote keywords, operators, and types
in diagnostics.
(potential_constant_expression_1): Same.
* cp-gimplify.c (cp_genericize_r): Same.
* cvt.c (maybe_warn_nodiscard): Quote keywords, operators, and types
in diagnostics.
(type_promotes_to): Same.
* decl.c (check_previous_goto_1): Same.
(check_goto): Same.
(start_decl): Same.
(cp_finish_decl): Avoid parenthesizing a sentence for consistency.
(grok_op_properties): Quote keywords, operators, and types
in diagnostics.
* decl2.c (grokfield): Same.
(coerce_delete_type): Same.
* except.c (is_admissible_throw_operand_or_catch_parameter): Same.
* friend.c (do_friend): Quote C++ tokens.
* init.c (build_new_1): Quote keywords, operators, and types
in diagnostics.
(build_vec_delete_1): Same.
(build_delete): Same.
* lex.c (parse_strconst_pragma): Same.
(handle_pragma_implementation): Same.
(unqualified_fn_lookup_error): Same.
* mangle.c (write_type): Same.
* method.c (defaulted_late_check): Avoid two consecutive punctuators.
* name-lookup.c (cp_binding_level_debug): Remove a trailing newline.
(pop_everything): Same.
* parser.c (cp_lexer_start_debugging): Quote a macro name.
in a diagnostic
(cp_lexer_stop_debugging): Same.
(cp_parser_userdef_numeric_literal): Quote a C++ header name
in a diagnostic.
(cp_parser_nested_name_specifier_opt): Quote keywords, operators,
and types in diagnostics.
(cp_parser_question_colon_clause): Same.
(cp_parser_asm_definition): Same.
(cp_parser_init_declarator): Same.
(cp_parser_template_declaration_after_parameters): Avoid capitalizing
a sentence in a diagnostic.
(cp_parser_omp_declare_reduction): Quote keywords, operators, and types
in diagnostics.
(cp_parser_transaction): Same.
* pt.c (maybe_process_partial_specialization): Replace second call
to permerror with inform for consistency with other uses.
(expand_integer_pack): Quote keywords, operators, and types
in diagnostics.
* rtti.c (get_typeid): Quote keywords, operators, and types
in diagnostics.
(build_dynamic_cast_1): Same.
* semantics.c (finish_asm_stmt): Same.
(finish_label_decl): Same.
(finish_bases): Same.
(finish_offsetof): Same.
(cp_check_omp_declare_reduction): Same.
(finish_decltype_type): Same.
* tree.c (handle_init_priority_attribute): Same. Add detail
to diagnostics.
(maybe_warn_zero_as_null_pointer_constant): Same.
* typeck.c (cp_build_binary_op): Quote keywords, operators, and types
in diagnostics.
(cp_build_unary_op): Same.
(check_for_casting_away_constness): Same.
(build_static_cast): Same.
(build_const_cast_1): Same.
(maybe_warn_about_returning_address_of_local): Same.
(check_return_expr): Same.
* typeck2.c (abstract_virtuals_error_sfinae): Same.
(digest_init_r): Replace a tab with spaces in a diagnostic.
(build_functional_cast): Quote keywords, operators, and types
in diagnostics.
gcc/d/ChangeLog:
* d-builtins.cc (d_init_builtins): Quote keywords, operators,
and types in diagnostics.
* d-codegen.cc (get_array_length): Same. Replace can't with cannot.
* d-convert.cc (convert_expr): Same.
* d-frontend.cc (getTypeInfoType): Quote an option name in
a diagnostic.
* d-lang.cc (d_handle_option): Same.
(d_parse_file): Same.
* decl.cc: Remove a trailing period from a diagnostic.
* expr.cc: Use a directive for an apostrophe.
* toir.cc: Quote keywords, operators, and types in diagnostics.
* typeinfo.cc (build_typeinfo): Quote an option name in a diagnostic.
gcc/fortran/ChangeLog:
* gfortranspec.c (append_arg): Spell out the word "argument."
gcc/ChangeLog:
* config/i386/i386-expand.c (get_element_number): Quote keywords
and other internal names in diagnostics. Adjust other diagnostic
formatting issues noted by -Wformat-diag.
* config/i386/i386-features.c
(ix86_mangle_function_version_assembler_name): Same.
* config/i386/i386-options.c (ix86_handle_abi_attribute): Same.
* config/i386/i386.c (ix86_function_type_abi): Same.
(ix86_function_ms_hook_prologue): Same.
(classify_argument): Same.
(ix86_expand_prologue): Same.
(ix86_md_asm_adjust): Same.
(ix86_memmodel_check): Same.
gcc/ChangeLog:
* builtins.c (expand_builtin_atomic_always_lock_free): Quote
identifiers, keywords, operators, and types in diagnostics. Correct
quoting, spelling, and sentence capitalization issues.
(expand_builtin_atomic_is_lock_free): Same.
(fold_builtin_next_arg): Same.
* cfgexpand.c (expand_one_var): Same.
(tree_conflicts_with_clobbers_p): Same.
(expand_asm_stmt): Same.
(verify_loop_structure): Same.
* cgraphunit.c (process_function_and_variable_attributes): Same.
* collect-utils.c (collect_execute): Same.
* collect2.c (maybe_run_lto_and_relink): Same.
(is_lto_object_file): Same.
(scan_prog_file): Same.
* convert.c (convert_to_real_1): Same.
* dwarf2out.c (dwarf2out_begin_prologue): Same.
* except.c (verify_eh_tree): Same.
* gcc.c (execute): Same.
(eval_spec_function): Same.
(run_attempt): Same.
(driver::set_up_specs): Same.
(compare_debug_auxbase_opt_spec_function): Same.
* gcov-tool.c (unlink_gcda_file): Same.
(do_merge): Same.
(do_rewrite): Same.
* gcse.c (gcse_or_cprop_is_too_expensive): Same.
* gimplify.c (gimplify_asm_expr): Same.
(gimplify_adjust_omp_clauses): Same.
* hsa-gen.c (gen_hsa_addr_insns): Same.
(gen_hsa_insns_for_load): Same.
(gen_hsa_cmp_insn_from_gimple): Same.
(gen_hsa_insns_for_operation_assignment): Same.
(gen_get_level): Same.
(gen_hsa_alloca): Same.
(omp_simple_builtin::generate): Same.
(gen_hsa_atomic_for_builtin): Same.
(gen_hsa_insns_for_call): Same.
* input.c (dump_location_info): Same.
* ipa-devirt.c (compare_virtual_tables): Same.
* ira.c (ira_setup_eliminable_regset): Same.
* lra-assigns.c (lra_assign): Same.
* lra-constraints.c (lra_constraints): Same.
* lto-streamer-in.c (lto_input_mode_table): Same.
* lto-wrapper.c (get_options_from_collect_gcc_options): Same.
(merge_and_complain): Same.
(compile_offload_image): Same.
(compile_images_for_offload_targets): Same.
(debug_objcopy): Same.
(run_gcc): Same.
(main): Same.
* opts.c (print_specific_help): Same.
(parse_no_sanitize_attribute): Same.
(print_help): Same.
(handle_param): Same.
* plugin.c (add_new_plugin): Same.
(parse_plugin_arg_opt): Same.
(try_init_one_plugin): Same.
* print-rtl.c (debug_bb_n_slim): Quote identifiers, keywords,
operators, and types in diagnostics. Correct quoting and spelling
issues.
* read-rtl-function.c (parse_edge_flag_token): Same.
(function_reader::parse_enum_value): Same.
* reg-stack.c (check_asm_stack_operands): Same.
* regcprop.c (validate_value_data): Same.
* sched-rgn.c (make_pass_sched_fusion): Same.
* stmt.c (check_unique_operand_names): Same.
* targhooks.c (default_target_option_pragma_parse): Same.
* tlink.c (recompile_files): Same.
* toplev.c (process_options): Same.
(do_compile): Same.
* trans-mem.c (diagnose_tm_1): Same.
(ipa_tm_scan_irr_block): Same.
(ipa_tm_diagnose_transaction): Same.
* tree-cfg.c (verify_address): Same. Use get_tree_code_name to
format a tree code name in a diagnostic.
(verify_types_in_gimple_min_lval): Same.
(verify_types_in_gimple_reference): Same.
(verify_gimple_call): Same.
(verify_gimple_assign_unary): Same.
(verify_gimple_assign_binary): Same.
(verify_gimple_assign_ternary): Same.
(verify_gimple_assign_single): Same.
(verify_gimple_switch): Same.
(verify_gimple_label): Same.
(verify_gimple_phi): Same.
(verify_gimple_in_seq): Same.
(verify_eh_throw_stmt_node): Same.
(collect_subblocks): Same.
(gimple_verify_flow_info): Same.
(do_warn_unused_result): Same.
* tree-inline.c (expand_call_inline): Same.
* tree-into-ssa.c (update_ssa): Same.
* tree.c (tree_int_cst_elt_check_failed): Same.
(tree_vec_elt_check_failed): Same.
(omp_clause_operand_check_failed): Same.
(verify_type_variant): Same.
(verify_type): Same.
* value-prof.c (verify_histograms): Same.
* varasm.c (assemble_start_function): Same.
gcc/lto/ChangeLog:
* lto-dump.c (lto_main): Same.
* lto.c (stream_out): Same.
gcc/objc/ChangeLog:
* objc-act.c (objc_begin_catch_clause): Quote keywords and options
in diagnostics.
(objc_build_throw_stmt): Same.
(objc_finish_message_expr): Same.
(get_super_receiver): Same.
* objc-next-runtime-abi-01.c (objc_next_runtime_abi_01_init): Spell
out "less than" in English./
* objc-next-runtime-abi-02.c (objc_next_runtime_abi_02_init): Spell
out "greater" in English.
gcc/testsuite/ChangeLog:
* c-c++-common/Wbool-operation-1.c: Adjust text of expected diagnostics.
* c-c++-common/Wvarargs-2.c: Same.
* c-c++-common/Wvarargs.c: Same.
* c-c++-common/pr51768.c: Same.
* c-c++-common/tm/inline-asm.c: Same.
* c-c++-common/tm/safe-1.c: Same.
* g++.dg/asm-qual-1.C: Same.
* g++.dg/asm-qual-3.C: Same.
* g++.dg/conversion/dynamic1.C: Same.
* g++.dg/cpp0x/constexpr-89599.C: Same.
* g++.dg/cpp0x/constexpr-cast.C: Same.
* g++.dg/cpp0x/constexpr-shift1.C: Same.
* g++.dg/cpp0x/lambda/lambda-conv11.C: Same.
* g++.dg/cpp0x/nullptr04.C: Same.
* g++.dg/cpp0x/static_assert12.C: Same.
* g++.dg/cpp0x/static_assert8.C: Same.
* g++.dg/cpp1y/lambda-conv1.C: Same.
* g++.dg/cpp1y/pr79393-3.C: Same.
* g++.dg/cpp1y/static_assert1.C: Same.
* g++.dg/cpp1z/constexpr-if4.C: Same.
* g++.dg/cpp1z/constexpr-if5.C: Same.
* g++.dg/cpp1z/constexpr-if9.C: Same.
* g++.dg/eh/goto2.C: Same.
* g++.dg/eh/goto3.C: Same.
* g++.dg/expr/static_cast8.C: Same.
* g++.dg/ext/flexary5.C: Same.
* g++.dg/ext/utf-array-short-wchar.C: Same.
* g++.dg/ext/utf-array.C: Same.
* g++.dg/ext/utf8-2.C: Same.
* g++.dg/gomp/loop-4.C: Same.
* g++.dg/gomp/macro-4.C: Same.
* g++.dg/gomp/udr-1.C: Same.
* g++.dg/init/initializer-string-too-long.C: Same.
* g++.dg/other/offsetof9.C: Same.
* g++.dg/ubsan/pr63956.C: Same.
* g++.dg/warn/Wbool-operation-1.C: Same.
* g++.dg/warn/Wtype-limits-Wextra.C: Same.
* g++.dg/warn/Wtype-limits.C: Same.
* g++.dg/wrappers/pr88680.C: Same.
* g++.old-deja/g++.mike/eh55.C: Same.
* gcc.dg/Wsign-compare-1.c: Same.
* gcc.dg/Wtype-limits-Wextra.c: Same.
* gcc.dg/Wtype-limits.c: Same.
* gcc.dg/Wunknownprag.c: Same.
* gcc.dg/Wunsuffixed-float-constants-1.c: Same.
* gcc.dg/asm-6.c: Same.
* gcc.dg/asm-qual-1.c: Same.
* gcc.dg/cast-1.c: Same.
* gcc.dg/cast-2.c: Same.
* gcc.dg/cast-3.c: Same.
* gcc.dg/cpp/source_date_epoch-2.c: Same.
* gcc.dg/debug/pr85252.c: Same.
* gcc.dg/dfp/cast-bad.c: Same.
* gcc.dg/format/gcc_diag-1.c: Same.
* gcc.dg/format/gcc_diag-11.c: Same.New test.
* gcc.dg/gcc_diag-11.c: Same.New test.
* gcc.dg/gnu-cond-expr-2.c: Same.
* gcc.dg/gnu-cond-expr-3.c: Same.
* gcc.dg/gomp/macro-4.c: Same.
* gcc.dg/init-bad-1.c: Same.
* gcc.dg/init-bad-2.c: Same.
* gcc.dg/init-bad-3.c: Same.
* gcc.dg/pr27528.c: Same.
* gcc.dg/pr48552-1.c: Same.
* gcc.dg/pr48552-2.c: Same.
* gcc.dg/pr59846.c: Same.
* gcc.dg/pr61096-1.c: Same.
* gcc.dg/pr8788-1.c: Same.
* gcc.dg/pr90082.c: Same.
* gcc.dg/simd-2.c: Same.
* gcc.dg/spellcheck-params-2.c: Same.
* gcc.dg/spellcheck-params.c: Same.
* gcc.dg/strlenopt-49.c: Same.
* gcc.dg/tm/pr52141.c: Same.
* gcc.dg/torture/pr51106-1.c: Same.
* gcc.dg/torture/pr51106-2.c: Same.
* gcc.dg/utf-array-short-wchar.c: Same.
* gcc.dg/utf-array.c: Same.
* gcc.dg/utf8-2.c: Same.
* gcc.dg/warn-sprintf-no-nul.c: Same.
* gcc.target/i386/asm-flag-0.c: Same.
* gcc.target/i386/inline_error.c: Same.
* gcc.target/i386/pr30848.c: Same.
* gcc.target/i386/pr39082-1.c: Same.
* gcc.target/i386/pr39678.c: Same.
* gcc.target/i386/pr57756.c: Same.
* gcc.target/i386/pr68843-1.c: Same.
* gcc.target/i386/pr79804.c: Same.
* gcc.target/i386/pr82673.c: Same.
* obj-c++.dg/class-protocol-1.mm: Same.
* obj-c++.dg/exceptions-3.mm: Same.
* obj-c++.dg/exceptions-4.mm: Same.
* obj-c++.dg/exceptions-5.mm: Same.
* obj-c++.dg/exceptions-6.mm: Same.
* obj-c++.dg/method-12.mm: Same.
* obj-c++.dg/method-13.mm: Same.
* obj-c++.dg/method-6.mm: Same.
* obj-c++.dg/method-7.mm: Same.
* obj-c++.dg/method-9.mm: Same.
* obj-c++.dg/method-lookup-1.mm: Same.
* obj-c++.dg/proto-lossage-4.mm: Same.
* obj-c++.dg/protocol-qualifier-2.mm: Same.
* objc.dg/call-super-2.m: Same.
* objc.dg/class-protocol-1.m: Same.
* objc.dg/desig-init-1.m: Same.
* objc.dg/exceptions-3.m: Same.
* objc.dg/exceptions-4.m: Same.
* objc.dg/exceptions-5.m: Same.
* objc.dg/exceptions-6.m: Same.
* objc.dg/method-19.m: Same.
* objc.dg/method-2.m: Same.
* objc.dg/method-5.m: Same.
* objc.dg/method-6.m: Same.
* objc.dg/method-7.m: Same.
* objc.dg/method-lookup-1.m: Same.
* objc.dg/proto-hier-1.m: Same.
* objc.dg/proto-lossage-4.m: Same.
From-SVN: r271338
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 89 | ||||
-rw-r--r-- | gcc/cp/call.c | 50 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 20 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 8 | ||||
-rw-r--r-- | gcc/cp/cvt.c | 10 | ||||
-rw-r--r-- | gcc/cp/decl.c | 31 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 10 | ||||
-rw-r--r-- | gcc/cp/except.c | 2 | ||||
-rw-r--r-- | gcc/cp/friend.c | 7 | ||||
-rw-r--r-- | gcc/cp/init.c | 20 | ||||
-rw-r--r-- | gcc/cp/lex.c | 12 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 4 | ||||
-rw-r--r-- | gcc/cp/method.c | 12 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 8 | ||||
-rw-r--r-- | gcc/cp/parser.c | 43 | ||||
-rw-r--r-- | gcc/cp/pt.c | 16 | ||||
-rw-r--r-- | gcc/cp/repo.c | 2 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 12 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 16 | ||||
-rw-r--r-- | gcc/cp/tree.c | 10 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 30 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 10 |
22 files changed, 266 insertions, 156 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 058773f..08b7d53 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,92 @@ +2019-05-16 Martin Sebor <msebor@redhat.com> + + * call.c (print_z_candidate): Wrap diagnostic text in a gettext + macro. Adjust. + (print_z_candidates): Same. + (build_conditional_expr_1): Quote keywords, operators, and types + in diagnostics. + (build_op_delete_call): Same. + (maybe_print_user_conv_context): Wrap diagnostic text in a gettext + macro. + (convert_like_real): Same. + (convert_arg_to_ellipsis): Quote keywords, operators, and types + in diagnostics. + (build_over_call): Same. + (joust): Break up an overlong line. Wrap diagnostic text in a gettext + macro. + * constexpr.c (cxx_eval_check_shift_p): Spell out >= in English. + (cxx_eval_constant_expression): Quote keywords, operators, and types + in diagnostics. + (potential_constant_expression_1): Same. + * cp-gimplify.c (cp_genericize_r): Same. + * cvt.c (maybe_warn_nodiscard): Quote keywords, operators, and types + in diagnostics. + (type_promotes_to): Same. + * decl.c (check_previous_goto_1): Same. + (check_goto): Same. + (start_decl): Same. + (cp_finish_decl): Avoid parenthesizing a sentence for consistency. + (grok_op_properties): Quote keywords, operators, and types + in diagnostics. + * decl2.c (grokfield): Same. + (coerce_delete_type): Same. + * except.c (is_admissible_throw_operand_or_catch_parameter): Same. + * friend.c (do_friend): Quote C++ tokens. + * init.c (build_new_1): Quote keywords, operators, and types + in diagnostics. + (build_vec_delete_1): Same. + (build_delete): Same. + * lex.c (parse_strconst_pragma): Same. + (handle_pragma_implementation): Same. + (unqualified_fn_lookup_error): Same. + * mangle.c (write_type): Same. + * method.c (defaulted_late_check): Avoid two consecutive punctuators. + * name-lookup.c (cp_binding_level_debug): Remove a trailing newline. + (pop_everything): Same. + * parser.c (cp_lexer_start_debugging): Quote a macro name. + in a diagnostic + (cp_lexer_stop_debugging): Same. + (cp_parser_userdef_numeric_literal): Quote a C++ header name + in a diagnostic. + (cp_parser_nested_name_specifier_opt): Quote keywords, operators, + and types in diagnostics. + (cp_parser_question_colon_clause): Same. + (cp_parser_asm_definition): Same. + (cp_parser_init_declarator): Same. + (cp_parser_template_declaration_after_parameters): Avoid capitalizing + a sentence in a diagnostic. + (cp_parser_omp_declare_reduction): Quote keywords, operators, and types + in diagnostics. + (cp_parser_transaction): Same. + * pt.c (maybe_process_partial_specialization): Replace second call + to permerror with inform for consistency with other uses. + (expand_integer_pack): Quote keywords, operators, and types + in diagnostics. + * rtti.c (get_typeid): Quote keywords, operators, and types + in diagnostics. + (build_dynamic_cast_1): Same. + * semantics.c (finish_asm_stmt): Same. + (finish_label_decl): Same. + (finish_bases): Same. + (finish_offsetof): Same. + (cp_check_omp_declare_reduction): Same. + (finish_decltype_type): Same. + * tree.c (handle_init_priority_attribute): Same. Add detail + to diagnostics. + (maybe_warn_zero_as_null_pointer_constant): Same. + * typeck.c (cp_build_binary_op): Quote keywords, operators, and types + in diagnostics. + (cp_build_unary_op): Same. + (check_for_casting_away_constness): Same. + (build_static_cast): Same. + (build_const_cast_1): Same. + (maybe_warn_about_returning_address_of_local): Same. + (check_return_expr): Same. + * typeck2.c (abstract_virtuals_error_sfinae): Same. + (digest_init_r): Replace a tab with spaces in a diagnostic. + (build_functional_cast): Quote keywords, operators, and types + in diagnostics. + 2019-05-15 Jakub Jelinek <jakub@redhat.com> PR debug/90197 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 0a5147a..e160dd1 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3603,7 +3603,7 @@ print_z_candidate (location_t loc, const char *msgstr, { const char *msg = (msgstr == NULL ? "" - : ACONCAT ((msgstr, " ", NULL))); + : ACONCAT ((_(msgstr), " ", NULL))); tree fn = candidate->fn; if (flag_new_inheriting_ctors) fn = strip_inheriting_ctors (fn); @@ -3613,24 +3613,24 @@ print_z_candidate (location_t loc, const char *msgstr, { cloc = loc; if (candidate->num_convs == 3) - inform (cloc, "%s%<%D(%T, %T, %T)%> <built-in>", msg, fn, + inform (cloc, "%s%<%D(%T, %T, %T)%> (built-in)", msg, fn, candidate->convs[0]->type, candidate->convs[1]->type, candidate->convs[2]->type); else if (candidate->num_convs == 2) - inform (cloc, "%s%<%D(%T, %T)%> <built-in>", msg, fn, + inform (cloc, "%s%<%D(%T, %T)%> (built-in)", msg, fn, candidate->convs[0]->type, candidate->convs[1]->type); else - inform (cloc, "%s%<%D(%T)%> <built-in>", msg, fn, + inform (cloc, "%s%<%D(%T)%> (built-in)", msg, fn, candidate->convs[0]->type); } else if (TYPE_P (fn)) - inform (cloc, "%s%qT <conversion>", msg, fn); + inform (cloc, "%s%qT (conversion)", msg, fn); else if (candidate->viable == -1) - inform (cloc, "%s%#qD <near match>", msg, fn); + inform (cloc, "%s%#qD (near match)", msg, fn); else if (DECL_DELETED_FN (fn)) - inform (cloc, "%s%#qD <deleted>", msg, fn); + inform (cloc, "%s%#qD (deleted)", msg, fn); else inform (cloc, "%s%#qD", msg, fn); if (fn != candidate->fn) @@ -3763,7 +3763,7 @@ print_z_candidates (location_t loc, struct z_candidate *candidates) } for (; candidates; candidates = candidates->next) - print_z_candidate (loc, "candidate:", candidates); + print_z_candidate (loc, N_("candidate:"), candidates); } /* USER_SEQ is a user-defined conversion sequence, beginning with a @@ -5003,7 +5003,8 @@ build_conditional_expr_1 (const op_location_t &loc, { if (complain & tf_error) pedwarn (loc, OPT_Wpedantic, - "ISO C++ forbids omitting the middle term of a ?: expression"); + "ISO C++ forbids omitting the middle term of " + "a %<?:%> expression"); if ((complain & tf_warning) && !truth_value_p (TREE_CODE (arg1))) warn_for_omitted_condop (loc, arg1); @@ -5276,7 +5277,8 @@ build_conditional_expr_1 (const op_location_t &loc, { if (complain & tf_error) { - error_at (loc, "operands to ?: have different types %qT and %qT", + error_at (loc, "operands to %<?:%> have different types " + "%qT and %qT", arg2_type, arg3_type); if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p) inform (loc, " and each type can be converted to the other"); @@ -5392,7 +5394,7 @@ build_conditional_expr_1 (const op_location_t &loc, if (!any_viable_p) { if (complain & tf_error) - error_at (loc, "operands to ?: have different types %qT and %qT", + error_at (loc, "operands to %<?:%> have different types %qT and %qT", arg2_type, arg3_type); return error_mark_node; } @@ -5539,7 +5541,7 @@ build_conditional_expr_1 (const op_location_t &loc, if (!result_type) { if (complain & tf_error) - error_at (loc, "operands to ?: have different types %qT and %qT", + error_at (loc, "operands to %<?:%> have different types %qT and %qT", arg2_type, arg3_type); return error_mark_node; } @@ -6489,10 +6491,10 @@ build_op_delete_call (enum tree_code code, tree addr, tree size, { const char *const msg1 = G_("exception cleanup for this placement new selects " - "non-placement operator delete"); + "non-placement %<operator delete%>"); const char *const msg2 = G_("%qD is a usual (non-placement) deallocation " - "function in C++14 (or with -fsized-deallocation)"); + "function in C++14 (or with %<-fsized-deallocation%>)"); /* But if the class has an operator delete (void *), then that is the usual deallocation function, so we shouldn't complain @@ -6889,7 +6891,7 @@ maybe_print_user_conv_context (conversion *convs) for (conversion *t = convs; t; t = next_conversion (t)) if (t->kind == ck_user) { - print_z_candidate (0, " after user-defined conversion:", + print_z_candidate (0, N_(" after user-defined conversion:"), t->cand); break; } @@ -7002,7 +7004,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, "from %qH to %qI", TREE_TYPE (expr), totype); if (complained) - print_z_candidate (loc, "candidate is:", t->cand); + print_z_candidate (loc, N_("candidate is:"), t->cand); expr = convert_like_real (t, expr, fn, argnum, /*issue_conversion_warnings=*/false, /*c_cast_p=*/false, @@ -7514,8 +7516,9 @@ convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain) if (abi_version_crosses (6) && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type) && (complain & tf_warning)) - warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as " - "%qT before %<-fabi-version=6%>, %qT after", arg_type, + warning_at (loc, OPT_Wabi, "scoped enum %qT passed through %<...%>" + "as %qT before %<-fabi-version=6%>, %qT after", + arg_type, TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type)); if (!abi_version_at_least (6)) arg = prom; @@ -8593,8 +8596,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (is_std_init_list (type) && conv_binds_ref_to_prvalue (convs[1])) warning_at (loc, OPT_Winit_list_lifetime, - "assignment from temporary initializer_list does not " - "extend the lifetime of the underlying array"); + "assignment from temporary %<initializer_list%> does " + "not extend the lifetime of the underlying array"); arg = cp_build_fold_indirect_ref (arg); val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg); } @@ -10740,7 +10743,8 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn, && warning (OPT_Wconversion, " for conversion from %qH to %qI", source, w->second_conv->type)) { - inform (input_location, " because conversion sequence for the argument is better"); + inform (input_location, " because conversion sequence " + "for the argument is better"); } } else @@ -11026,8 +11030,8 @@ tweak: "though the worst conversion for the first is " "better than the worst conversion for the second:")) { - print_z_candidate (input_location, _("candidate 1:"), w); - print_z_candidate (input_location, _("candidate 2:"), l); + print_z_candidate (input_location, N_("candidate 1:"), w); + print_z_candidate (input_location, N_("candidate 2:"), l); } } else diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 8ae0fd5..67a8f04 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -2020,9 +2020,9 @@ cxx_eval_check_shift_p (location_t loc, const constexpr_ctx *ctx, if (compare_tree_int (rhs, uprec) >= 0) { if (!ctx->quiet) - permerror (loc, "right operand of shift expression %q+E is >= than " - "the precision of the left operand", - build2_loc (loc, code, type, lhs, rhs)); + permerror (loc, "right operand of shift expression %q+E is greater " + "than or equal to the precision %wu of the left operand", + build2_loc (loc, code, type, lhs, rhs), uprec); return (!flag_permissive || ctx->quiet); } @@ -4420,7 +4420,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, if (!ctx->quiet) error_at (cp_expr_loc_or_loc (t, input_location), "%<constexpr%> evaluation operation count exceeds limit of " - "%wd (use -fconstexpr-ops-limit= to increase the limit)", + "%wd (use %<-fconstexpr-ops-limit=%> to increase the limit)", constexpr_ops_limit); *ctx->constexpr_ops_count = INTTYPE_MINIMUM (HOST_WIDE_INT); *non_constant_p = true; @@ -4957,7 +4957,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, { if (!ctx->quiet) error_at (cp_expr_loc_or_loc (t, input_location), - "a reinterpret_cast is not a constant expression"); + "%<reinterpret_cast%> is not a constant expression"); *non_constant_p = true; return t; } @@ -6116,7 +6116,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, if (REINTERPRET_CAST_P (t)) { if (flags & tf_error) - error_at (loc, "a reinterpret_cast is not a constant expression"); + error_at (loc, "%<reinterpret_cast%> is not a constant expression"); return false; } /* FALLTHRU */ @@ -6135,7 +6135,8 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, && !integer_zerop (from)) { if (flags & tf_error) - error_at (loc, "reinterpret_cast from integer to pointer"); + error_at (loc, + "%<reinterpret_cast%> from integer to pointer"); return false; } } @@ -6389,7 +6390,8 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, /* In C++2a virtual calls can be constexpr, don't give up yet. */ return true; else if (flags & tf_error) - error_at (loc, "virtual functions cannot be constexpr before C++2a"); + error_at (loc, + "virtual functions cannot be %<constexpr%> before C++2a"); return false; case TYPEID_EXPR: @@ -6401,7 +6403,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, && TYPE_POLYMORPHIC_P (TREE_TYPE (e))) { if (flags & tf_error) - error_at (loc, "typeid-expression is not a constant expression " + error_at (loc, "%<typeid%> is not a constant expression " "because %qE is of polymorphic type", e); return false; } diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 72d8581..e8c22c0 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -1489,10 +1489,10 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) { auto_diagnostic_group d; if (warning_at (loc, OPT_Wterminate, - "throw will always call terminate()") + "%<throw%> will always call %<terminate%>") && cxx_dialect >= cxx11 && DECL_DESTRUCTOR_P (current_function_decl)) - inform (loc, "in C++11 destructors default to noexcept"); + inform (loc, "in C++11 destructors default to %<noexcept%>"); } } else @@ -1504,8 +1504,8 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) && (get_defaulted_eh_spec (current_function_decl) == empty_except_spec)) warning_at (loc, OPT_Wc__11_compat, - "in C++11 this throw will terminate because " - "destructors default to noexcept"); + "in C++11 this %<throw%> will call %<terminate%> " + "because destructors default to %<noexcept%>"); } } break; diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 3d40927..7ebbf3c 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -88,7 +88,7 @@ cp_convert_to_pointer (tree type, tree expr, bool dofold, if (!COMPLETE_TYPE_P (intype)) { if (complain & tf_error) - error_at (loc, "can%'t convert from incomplete type %qH to %qI", + error_at (loc, "cannot convert from incomplete type %qH to %qI", intype, type); return error_mark_node; } @@ -1060,14 +1060,14 @@ maybe_warn_nodiscard (tree expr, impl_conv_void implicit) auto_diagnostic_group d; if (warning_at (loc, OPT_Wunused_result, "ignoring return value of %qD, " - "declared with attribute warn_unused_result", + "declared with attribute %<warn_unused_result%>", fn)) inform (DECL_SOURCE_LOCATION (fn), "declared here"); } else warning_at (loc, OPT_Wunused_result, "ignoring return value of function " - "declared with attribute warn_unused_result"); + "declared with attribute %<warn_unused_result%>"); } } @@ -1820,7 +1820,7 @@ build_expr_type_conversion (int desires, tree expr, bool complain) if (TREE_CODE (cand) == TEMPLATE_DECL) { if (complain) - error ("default type conversion can%'t deduce template" + error ("default type conversion cannot deduce template" " argument for %qD", cand); return error_mark_node; } @@ -1920,7 +1920,7 @@ type_promotes_to (tree type) { if (abi_version_crosses (6) && TYPE_MODE (prom) != TYPE_MODE (type)) - warning (OPT_Wabi, "scoped enum %qT passed through ... as " + warning (OPT_Wabi, "scoped enum %qT passed through %<...%> as " "%qT before %<-fabi-version=6%>, %qT after", type, prom, ENUM_UNDERLYING_TYPE (type)); if (!abi_version_at_least (6)) diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 6918c3b..19d14a6 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3228,32 +3228,32 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, { case sk_try: if (!saw_eh) - inf = N_("enters try block"); + inf = G_(" enters %<try%> block"); saw_eh = true; break; case sk_catch: if (!saw_eh) - inf = N_("enters catch block"); + inf = G_(" enters %<catch%> block"); saw_eh = true; break; case sk_omp: if (!saw_omp) - inf = N_("enters OpenMP structured block"); + inf = G_(" enters OpenMP structured block"); saw_omp = true; break; case sk_transaction: if (!saw_tm) - inf = N_("enters synchronized or atomic statement"); + inf = G_(" enters synchronized or atomic statement"); saw_tm = true; break; case sk_block: if (!saw_cxif && level_for_constexpr_if (b->level_chain)) { - inf = N_("enters constexpr if statement"); + inf = G_(" enters %<constexpr if%> statement"); loc = EXPR_LOCATION (b->level_chain->this_entity); saw_cxif = true; } @@ -3269,7 +3269,7 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, complained = identify_goto (decl, input_location, locus, DK_ERROR); identified = 2; if (complained) - inform (loc, " %s", inf); + inform (loc, inf); } } @@ -3364,7 +3364,7 @@ check_goto (tree decl) identified = 2; } if (complained) - inform (DECL_SOURCE_LOCATION (bad), " enters catch block"); + inform (DECL_SOURCE_LOCATION (bad), " enters %<catch%> block"); saw_catch = true; } else if (complained) @@ -3382,13 +3382,13 @@ check_goto (tree decl) if (complained) { if (ent->in_try_scope) - inform (input_location, " enters try block"); + inform (input_location, " enters %<try%> block"); else if (ent->in_catch_scope && !saw_catch) - inform (input_location, " enters catch block"); + inform (input_location, " enters %<catch%> block"); 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) @@ -5078,7 +5078,8 @@ start_decl (const cp_declarator *declarator, && TREE_CODE (decl) == TYPE_DECL) { error_at (DECL_SOURCE_LOCATION (decl), - "typedef %qD is initialized (use decltype instead)", decl); + "typedef %qD is initialized (use %qs instead)", + decl, "decltype"); return error_mark_node; } @@ -7020,8 +7021,8 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, return; if (TREE_CODE (type) == FUNCTION_TYPE) { - error ("initializer for %<decltype(auto) %D%> has function type " - "(did you forget the %<()%> ?)", decl); + error ("initializer for %<decltype(auto) %D%> has function type; " + "did you forget the %<()%>?", decl); TREE_TYPE (decl) = error_mark_node; return; } @@ -11569,7 +11570,7 @@ grokdeclarator (const cp_declarator *declarator, error ("friend declaration not in class definition"); if (current_function_decl && funcdef_flag) { - error ("can%'t define friend function %qs in a local " + error ("cannot define friend function %qs in a local " "class definition", name); friendp = 0; } @@ -13612,7 +13613,7 @@ grok_op_properties (tree decl, bool complain) if (operator_code == COND_EXPR) { /* 13.4.0.3 */ - error_at (loc, "ISO C++ prohibits overloading operator ?:"); + error_at (loc, "ISO C++ prohibits overloading %<operator ?:%>"); return false; } diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index fb3b911..bd022ca 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -830,7 +830,8 @@ grokfield (const cp_declarator *declarator, if (TREE_CODE (value) == TYPE_DECL && init) { error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (value)), - "typedef %qD is initialized (use decltype instead)", value); + "typedef %qD is initialized (use %qs instead)", + value, "decltype"); init = NULL_TREE; } @@ -1772,12 +1773,13 @@ coerce_delete_type (tree decl, location_t loc) else /* A destroying operator delete shall be a class member function named operator delete. */ - error_at (loc, "destroying operator delete must be a member function"); + error_at (loc, + "destroying %<operator delete%> must be a member function"); const ovl_op_info_t *op = IDENTIFIER_OVL_OP_INFO (DECL_NAME (decl)); if (op->flags & OVL_OP_FLAG_VEC) - error_at (loc, "operator delete[] cannot be a destroying delete"); + error_at (loc, "%<operator delete[]%> cannot be a destroying delete"); if (!usual_deallocation_fn_p (decl)) - error_at (loc, "destroying operator delete must be a usual " + error_at (loc, "destroying %<operator delete%> must be a usual " "deallocation function"); } diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 3b792cb..892d520 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -936,7 +936,7 @@ is_admissible_throw_operand_or_catch_parameter (tree t, bool is_throw) && TYPE_REF_P (type) && TYPE_REF_IS_RVALUE (type)) { - error ("cannot declare catch parameter to be of rvalue " + error ("cannot declare %<catch%> parameter to be of rvalue " "reference type %qT", type); return false; } diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c index 2429cd4..4ea4bbc 100644 --- a/gcc/cp/friend.c +++ b/gcc/cp/friend.c @@ -638,9 +638,10 @@ do_friend (tree ctype, tree declarator, tree decl, "%q#D declares a non-template function", decl); if (! explained && warned) { - inform (input_location, "(if this is not what you intended, make sure " - "the function template has already been declared " - "and add <> after the function name here) "); + inform (input_location, "(if this is not what you intended, " + "make sure the function template has already been " + "declared and add %<<>%> after the function name " + "here)"); explained = 1; } } diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 68d04ad..4ffd96e 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -3005,7 +3005,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, pedwarn (cp_expr_loc_or_loc (outer_nelts, input_location), OPT_Wvla, typedef_variant_p (orig_type) ? G_("non-constant array new length must be specified " - "directly, not by typedef") + "directly, not by %<typedef%>") : G_("non-constant array new length must be specified " "without parentheses around the type-id")); } @@ -3016,13 +3016,13 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, if (VOID_TYPE_P (elt_type)) { if (complain & tf_error) - error ("invalid type %<void%> for new"); + error ("invalid type %<void%> for %<new%>"); return error_mark_node; } if (is_std_init_list (elt_type)) warning (OPT_Winit_list_lifetime, - "%<new%> of initializer_list does not " + "%<new%> of %<initializer_list%> does not " "extend the lifetime of the underlying array"); if (abstract_virtuals_error_sfinae (ACU_NEW, elt_type, complain)) @@ -3867,11 +3867,11 @@ build_vec_delete_1 (tree base, tree maxindex, tree type, auto_diagnostic_group d; if (warning (OPT_Wdelete_incomplete, "possible problem detected in invocation of " - "delete [] operator:")) + "operator %<delete []%>")) { cxx_incomplete_type_diagnostic (base, type, DK_WARNING); inform (input_location, "neither the destructor nor the " - "class-specific operator delete [] will be called, " + "class-specific operator %<delete []%> will be called, " "even if they are declared when the class is defined"); } } @@ -4753,14 +4753,14 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete, { auto_diagnostic_group d; if (warning (OPT_Wdelete_incomplete, - "possible problem detected in invocation of " - "delete operator:")) + "possible problem detected in invocation of " + "%<operator delete%>")) { cxx_incomplete_type_diagnostic (addr, type, DK_WARNING); inform (input_location, - "neither the destructor nor the class-specific " - "operator delete will be called, even if they " - "are declared when the class is defined"); + "neither the destructor nor the class-specific " + "%<operator delete%> will be called, even if " + "they are declared when the class is defined"); } } } diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index 369ecc0..20965e4 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -385,14 +385,14 @@ parse_strconst_pragma (const char* name, int opt) if (t == CPP_STRING) { if (pragma_lex (&x) != CPP_EOF) - warning (0, "junk at end of #pragma %s", name); + warning (0, "junk at end of %<#pragma %s%>", name); return result; } if (t == CPP_EOF && opt) return NULL_TREE; - error ("invalid #pragma %s", name); + error ("invalid %<#pragma %s%>", name); return error_mark_node; } @@ -400,7 +400,7 @@ static void handle_pragma_vtable (cpp_reader* /*dfile*/) { parse_strconst_pragma ("vtable", 0); - sorry ("#pragma vtable no longer supported"); + sorry ("%<#pragma vtable%> no longer supported"); } static void @@ -472,7 +472,7 @@ handle_pragma_implementation (cpp_reader* /*dfile*/) { filename = TREE_STRING_POINTER (fname); if (cpp_included_before (parse_in, filename, input_location)) - warning (0, "#pragma implementation for %qs appears after " + warning (0, "%<#pragma implementation%> for %qs appears after " "file is included", filename); } @@ -568,8 +568,8 @@ unqualified_fn_lookup_error (cp_expr name_expr) if (!hint) { inform (loc, "(if you use %<-fpermissive%>, G++ will accept your " - "code, but allowing the use of an undeclared name is " - "deprecated)"); + "code, but allowing the use of an undeclared name is " + "deprecated)"); hint = true; } } diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index acb81d1..d66482b 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2305,11 +2305,11 @@ write_type (tree type) break; case TYPEOF_TYPE: - sorry ("mangling typeof, use decltype instead"); + sorry ("mangling %<typeof%>, use %<decltype%> instead"); break; case UNDERLYING_TYPE: - sorry ("mangling __underlying_type"); + sorry ("mangling %<__underlying_type%>"); break; case LANG_TYPE: diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 31737d1..3fb3b5a 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -826,13 +826,13 @@ do_build_copy_assign (tree fndecl) if (CP_TYPE_CONST_P (expr_type)) { - error ("non-static const member %q#D, can%'t use default " + error ("non-static const member %q#D, cannot use default " "assignment operator", field); continue; } else if (TYPE_REF_P (expr_type)) { - error ("non-static reference member %q#D, can%'t use " + error ("non-static reference member %q#D, cannot use " "default assignment operator", field); continue; } @@ -1336,13 +1336,13 @@ walk_field_subobs (tree fields, special_function_kind sfk, tree fnname, if (CP_TYPE_CONST_P (mem_type) && !CLASS_TYPE_P (mem_type)) { if (diag) - error ("non-static const member %q#D, can%'t use default " + error ("non-static const member %q#D, cannot use default " "assignment operator", field); } else if (TYPE_REF_P (mem_type)) { if (diag) - error ("non-static reference member %q#D, can%'t use " + error ("non-static reference member %q#D, cannot use " "default assignment operator", field); } else @@ -2248,8 +2248,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); + "%qs because the implicit declaration is not %qs:", + fn, "constexpr", "constexpr"); explain_implicit_non_constexpr (fn); } DECL_DECLARED_CONSTEXPR_P (fn) = false; diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 89d85f6..d8d71be 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3270,10 +3270,10 @@ cp_binding_level_debug (cp_binding_level *scope, int line, const char *action) { const char *desc = cp_binding_level_descriptor (scope); if (scope->this_entity) - verbatim ("%s %<%s(%E)%> %p %d\n", action, desc, + verbatim ("%s %<%s(%E)%> %p %d", action, desc, scope->this_entity, (void *) scope, line); else - verbatim ("%s %s %p %d\n", action, desc, (void *) scope, line); + verbatim ("%s %s %p %d", action, desc, (void *) scope, line); } /* A chain of binding_level structures awaiting reuse. */ @@ -7499,7 +7499,7 @@ void pop_everything (void) { if (ENABLE_SCOPE_CHECKING) - verbatim ("XXX entering pop_everything ()\n"); + verbatim ("XXX entering %<pop_everything ()%>"); while (!namespace_bindings_p ()) { if (current_binding_level->kind == sk_class) @@ -7508,7 +7508,7 @@ pop_everything (void) poplevel (0, 0, 0); } if (ENABLE_SCOPE_CHECKING) - verbatim ("XXX leaving pop_everything ()\n"); + verbatim ("XXX leaving %<pop_everything ()%>"); } /* Emit debugging information for using declarations and directives. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ab3e672..e6ef5a9 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -1308,7 +1308,7 @@ cp_lexer_start_debugging (cp_lexer* lexer) { if (!LEXER_DEBUGGING_ENABLED_P) fatal_error (input_location, - "LEXER_DEBUGGING_ENABLED_P is not set to true"); + "%<LEXER_DEBUGGING_ENABLED_P%> is not set to true"); lexer->debugging_p = true; cp_lexer_debug_stream = stderr; @@ -1321,7 +1321,7 @@ cp_lexer_stop_debugging (cp_lexer* lexer) { if (!LEXER_DEBUGGING_ENABLED_P) fatal_error (input_location, - "LEXER_DEBUGGING_ENABLED_P is not set to true"); + "%<LEXER_DEBUGGING_ENABLED_P%> is not set to true"); lexer->debugging_p = false; cp_lexer_debug_stream = NULL; @@ -4537,7 +4537,7 @@ cp_parser_userdef_numeric_literal (cp_parser *parser) else if (i14) { inform (token->location, "add %<using namespace std::complex_literals%> " - "(from <complex>) to enable the C++14 user-defined literal " + "(from %<<complex>%>) to enable the C++14 user-defined literal " "suffixes"); if (ext) inform (token->location, "or use %<j%> instead of %<i%> for the " @@ -6400,7 +6400,7 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser, == CPP_SCOPE)) { token = cp_lexer_consume_token (parser->lexer); - error_at (token->location, "decltype evaluates to %qT, " + error_at (token->location, "%<decltype%> evaluates to %qT, " "which is not a class or enumeration type", token->u.tree_check_value->value); parser->scope = error_mark_node; @@ -9671,7 +9671,7 @@ cp_parser_question_colon_clause (cp_parser* parser, cp_expr logical_or_expr) && token->type == CPP_COLON) { pedwarn (token->location, OPT_Wpedantic, - "ISO C++ does not allow ?: with omitted middle operand"); + "ISO C++ does not allow %<?:%> with omitted middle operand"); /* Implicit true clause. */ expr = NULL_TREE; c_inhibit_evaluation_warnings += @@ -14442,7 +14442,7 @@ cp_parser_static_assert(cp_parser *parser, bool member_p) { if (cxx_dialect < cxx17) pedwarn (input_location, OPT_Wpedantic, - "static_assert without a message " + "%<static_assert%> without a message " "only available with %<-std=c++17%> or %<-std=gnu++17%>"); /* Eat the ')' */ cp_lexer_consume_token (parser->lexer); @@ -19818,14 +19818,15 @@ cp_parser_asm_definition (cp_parser* parser) case RID_VOLATILE: if (volatile_loc) { - error_at (loc, "duplicate asm qualifier %qT", token->u.value); + error_at (loc, "duplicate %<asm%> qualifier %qT", + token->u.value); inform (volatile_loc, "first seen here"); } else { if (!parser->in_function_body) - warning_at (loc, 0, "asm qualifier %qT ignored outside of " - "function body", token->u.value); + warning_at (loc, 0, "%<asm%> qualifier %qT ignored " + "outside of function body", token->u.value); volatile_loc = loc; } cp_lexer_consume_token (parser->lexer); @@ -19834,7 +19835,8 @@ cp_parser_asm_definition (cp_parser* parser) case RID_INLINE: if (inline_loc) { - error_at (loc, "duplicate asm qualifier %qT", token->u.value); + error_at (loc, "duplicate %<asm%> qualifier %qT", + token->u.value); inform (inline_loc, "first seen here"); } else @@ -19847,7 +19849,8 @@ cp_parser_asm_definition (cp_parser* parser) case RID_GOTO: if (goto_loc) { - error_at (loc, "duplicate asm qualifier %qT", token->u.value); + error_at (loc, "duplicate %<asm%> qualifier %qT", + token->u.value); inform (goto_loc, "first seen here"); } else @@ -19859,7 +19862,7 @@ cp_parser_asm_definition (cp_parser* parser) case RID_CONST: case RID_RESTRICT: - error_at (loc, "%qT is not an asm qualifier", token->u.value); + error_at (loc, "%qT is not an %<asm%> qualifier", token->u.value); cp_lexer_consume_token (parser->lexer); continue; @@ -19875,7 +19878,7 @@ cp_parser_asm_definition (cp_parser* parser) if (!parser->in_function_body && (inline_p || goto_p)) { - error_at (first_loc, "asm qualifier outside of function body"); + error_at (first_loc, "%<asm%> qualifier outside of function body"); inline_p = goto_p = false; } @@ -20257,7 +20260,7 @@ cp_parser_init_declarator (cp_parser* parser, on a function-definition. */ if (asm_specification) error_at (asm_spec_start_token->location, - "an asm-specification is not allowed " + "an %<asm%> specification is not allowed " "on a function-definition"); if (attributes) error_at (attributes_start_token->location, @@ -27913,12 +27916,12 @@ cp_parser_template_declaration_after_parameters (cp_parser* parser, { if (cxx_dialect > cxx17) error ("literal operator template %qD has invalid parameter list;" - " Expected non-type template parameter pack <char...> " + " expected non-type template parameter pack %<<char...>%> " "or single non-type parameter of class type", decl); else - error ("literal operator template %qD has invalid parameter list." - " Expected non-type template parameter pack <char...>", + error ("literal operator template %qD has invalid parameter list;" + " expected non-type template parameter pack %<<char...>%>", decl); } } @@ -39634,8 +39637,8 @@ cp_parser_omp_declare_reduction (cp_parser *parser, cp_token *pragma_tok, error_at (loc, "reference type %qT in " "%<#pragma omp declare reduction%>", type); else if (TYPE_QUALS_NO_ADDR_SPACE (type)) - error_at (loc, "const, volatile or __restrict qualified type %qT in " - "%<#pragma omp declare reduction%>", type); + error_at (loc, "%<const%>, %<volatile%> or %<__restrict%>-qualified " + "type %qT in %<#pragma omp declare reduction%>", type); else types.safe_push (type); @@ -40486,7 +40489,7 @@ cp_parser_transaction (cp_parser *parser, cp_token *token) else if (keyword == RID_ATOMIC_CANCEL) { /* cancel-and-throw is unimplemented. */ - sorry ("atomic_cancel"); + sorry ("%<atomic_cancel%>"); noex = NULL_TREE; } else diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index edb0701..ab79a9e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1058,10 +1058,11 @@ maybe_process_partial_specialization (tree type) if (current_namespace != decl_namespace_context (tmpl)) { - permerror (input_location, - "specializing %q#T in different namespace", type); - permerror (DECL_SOURCE_LOCATION (tmpl), - " from definition of %q#D", tmpl); + if (permerror (input_location, + "specialization of %qD in different namespace", + type)) + inform (DECL_SOURCE_LOCATION (tmpl), + "from definition of %q#D", tmpl); } /* Check for invalid specialization after instantiation: @@ -3606,7 +3607,8 @@ expand_integer_pack (tree call, tree args, tsubst_flags_t complain, { if ((complain & tf_error) && hi != error_mark_node) - error ("argument to __integer_pack must be between 0 and %d", max); + error ("argument to %<__integer_pack%> must be between 0 and %d", + max); return error_mark_node; } @@ -4081,7 +4083,7 @@ check_for_bare_parameter_packs (tree t, location_t loc /* = UNKNOWN_LOCATION */) if (name) inform (loc, " %qD", name); else - inform (loc, " <anonymous>"); + inform (loc, " %s", "<anonymous>"); parameter_packs = TREE_CHAIN (parameter_packs); } @@ -6565,7 +6567,7 @@ unify_template_deduction_failure (bool explain_p, tree parm, tree arg) { if (explain_p) inform (input_location, - " can%'t deduce a template for %qT from non-template type %qT", + " cannot deduce a template for %qT from non-template type %qT", parm, arg); return unify_invalid (explain_p); } diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c index 5588e6a..4c44a07 100644 --- a/gcc/cp/repo.c +++ b/gcc/cp/repo.c @@ -218,7 +218,7 @@ reopen_repo_file_for_write (void) if (repo_file == 0) { - error ("can%'t create repository information file %qs", repo_name); + error ("cannot create repository information file %qs", repo_name); flag_use_repository = 0; } diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 26dae3c..ef78564 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -512,7 +512,7 @@ get_typeid (tree type, tsubst_flags_t complain) || type_memfn_rqual (type) != REF_QUAL_NONE)) { if (complain & tf_error) - error ("typeid of qualified function type %qT", type); + error ("%<typeid%> of qualified function type %qT", type); return error_mark_node; } @@ -693,8 +693,8 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst_flags_t complain) { tree expr = throw_bad_cast (); if (complain & tf_warning) - warning (0, "dynamic_cast of %q#D to %q#T can never succeed", - old_expr, type); + warning (0, "%<dynamic_cast<%#T>(%#D)%> can never succeed", + type, old_expr); /* Bash it to the expected type. */ TREE_TYPE (expr) = type; return expr; @@ -708,8 +708,8 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst_flags_t complain) && TREE_CODE (TREE_TYPE (op)) == RECORD_TYPE) { if (complain & tf_warning) - warning (0, "dynamic_cast of %q#D to %q#T can never succeed", - op, type); + warning (0, "%<dynamic_cast<%#T>(%#D)%> can never succeed", + type, op); retval = build_int_cst (type, 0); return retval; } @@ -798,7 +798,7 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst_flags_t complain) fail: if (complain & tf_error) - error ("cannot dynamic_cast %qE (of type %q#T) to type %q#T (%s)", + error ("cannot %<dynamic_cast%> %qE (of type %q#T) to type %q#T (%s)", old_expr, TREE_TYPE (old_expr), type, errstr); return error_mark_node; } diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 3845934..fc5edde 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1585,7 +1585,7 @@ finish_asm_stmt (int volatile_p, tree string, tree output_operands, resolve the overloading. */ if (TREE_TYPE (operand) == unknown_type_node) { - error ("type of asm operand %qE could not be determined", + error ("type of %<asm%> operand %qE could not be determined", TREE_VALUE (t)); operand = error_mark_node; } @@ -1667,7 +1667,7 @@ finish_label_decl (tree name) { if (!at_function_scope_p ()) { - error ("__label__ declarations are only allowed in function scopes"); + error ("%<__label__%> declarations are only allowed in function scopes"); return; } @@ -4099,7 +4099,7 @@ finish_bases (tree type, bool direct) if (!processing_template_decl) { /* Parameter packs can only be used in templates */ - error ("Parameter pack __bases only valid in template declaration"); + error ("parameter pack %<__bases%> only valid in template declaration"); return error_mark_node; } @@ -4164,7 +4164,7 @@ finish_offsetof (tree object_ptr, tree expr, location_t loc) && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (object_ptr))) && CLASSTYPE_NON_STD_LAYOUT (TREE_TYPE (TREE_TYPE (object_ptr))) && cp_unevaluated_operand == 0) - warning_at (loc, OPT_Winvalid_offsetof, "offsetof within " + warning_at (loc, OPT_Winvalid_offsetof, "%<offsetof%> within " "non-standard-layout type %qT is conditionally-supported", TREE_TYPE (TREE_TYPE (object_ptr))); return fold_offsetof (expr); @@ -5546,8 +5546,8 @@ cp_check_omp_declare_reduction (tree udr) } else if (TYPE_QUALS_NO_ADDR_SPACE (type)) { - error_at (loc, "const, volatile or __restrict qualified type %qT in " - "%<#pragma omp declare reduction%>", type); + error_at (loc, "%<const%>, %<volatile%> or %<__restrict%>-qualified " + "type %qT in %<#pragma omp declare reduction%>", type); return; } @@ -9334,7 +9334,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p, && TYPE_P (TREE_OPERAND (expr, 0)))) { if (complain & tf_error) - error ("argument to decltype must be an expression"); + error ("argument to %<decltype%> must be an expression"); return error_mark_node; } @@ -9362,7 +9362,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p, if (type_unknown_p (expr)) { if (complain & tf_error) - error ("decltype cannot resolve address of overloaded function"); + error ("%<decltype%> cannot resolve address of overloaded function"); return error_mark_node; } diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 14d6aff..8d7f7a2 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -4472,7 +4472,7 @@ handle_init_priority_attribute (tree* node, if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST) { - error ("requested init_priority is not an integer constant"); + error ("requested %<init_priority%> is not an integer constant"); cxx_constant_value (initp_expr); *no_add_attrs = true; return NULL_TREE; @@ -4502,7 +4502,8 @@ handle_init_priority_attribute (tree* node, if (pri > MAX_INIT_PRIORITY || pri <= 0) { - error ("requested init_priority is out of range"); + error ("requested %<init_priority%> %i is out of range [0, %i]", + pri, MAX_INIT_PRIORITY); *no_add_attrs = true; return NULL_TREE; } @@ -4512,7 +4513,8 @@ handle_init_priority_attribute (tree* node, if (pri <= MAX_RESERVED_INIT_PRIORITY) { warning - (0, "requested init_priority is reserved for internal use"); + (0, "requested %<init_priority%> %i is reserved for internal use", + pri); } if (SUPPORTS_INIT_PRIORITY) @@ -5477,7 +5479,7 @@ maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc) void lang_check_failed (const char* file, int line, const char* function) { - internal_error ("lang_* check: failed in %s, at %s:%d", + internal_error ("%<lang_*%> check: failed in %s, at %s:%d", function, trim_filename (file), line); } #endif /* ENABLE_TREE_CHECKING */ diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 36e6b24..7289f2c 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4887,7 +4887,7 @@ cp_build_binary_op (const op_location_t &location, && c_inhibit_evaluation_warnings == 0 && (FLOAT_TYPE_P (type0) || FLOAT_TYPE_P (type1))) warning (OPT_Wfloat_equal, - "comparing floating point with == or != is unsafe"); + "comparing floating point with %<==%> or %<!=%> is unsafe"); if (complain & tf_warning) { tree stripped_orig_op0 = tree_strip_any_location_wrapper (orig_op0); @@ -6274,7 +6274,7 @@ cp_build_unary_op (enum tree_code code, tree xarg, bool noconvert, if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE && (complain & tf_warning) && warning_at (location, OPT_Wbool_operation, - "%<~%> on an expression of type bool")) + "%<~%> on an expression of type %<bool%>")) inform (location, "did you mean to use logical not (%<!%>)?"); arg = cp_perform_integral_promotions (arg, complain); } @@ -6942,13 +6942,15 @@ check_for_casting_away_constness (tree src_type, tree dest_type, case STATIC_CAST_EXPR: if (complain & tf_error) - error ("static_cast from type %qT to type %qT casts away qualifiers", + error ("%<static_cast%> from type %qT to type %qT casts away " + "qualifiers", src_type, dest_type); return true; case REINTERPRET_CAST_EXPR: if (complain & tf_error) - error ("reinterpret_cast from type %qT to type %qT casts away qualifiers", + error ("%<reinterpret_cast%> from type %qT to type %qT casts away " + "qualifiers", src_type, dest_type); return true; @@ -7401,7 +7403,7 @@ build_static_cast (tree type, tree oexpr, tsubst_flags_t complain) if (complain & tf_error) { - error ("invalid static_cast from type %qT to type %qT", + error ("invalid %<static_cast%> from type %qT to type %qT", TREE_TYPE (expr), type); if ((TYPE_PTR_P (type) || TYPE_REF_P (type)) && CLASS_TYPE_P (TREE_TYPE (type)) @@ -7738,7 +7740,7 @@ build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain, if (!INDIRECT_TYPE_P (dst_type) && !TYPE_PTRDATAMEM_P (dst_type)) { if (complain & tf_error) - error ("invalid use of const_cast with type %qT, " + error ("invalid use of %<const_cast%> with type %qT, " "which is not a pointer, " "reference, nor a pointer-to-data-member type", dst_type); return error_mark_node; @@ -7747,8 +7749,9 @@ build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain, if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE) { if (complain & tf_error) - error ("invalid use of const_cast with type %qT, which is a pointer " - "or reference to a function type", dst_type); + error ("invalid use of %<const_cast%> with type %qT, " + "which is a pointer or reference to a function type", + dst_type); return error_mark_node; } @@ -7788,7 +7791,8 @@ build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain, else { if (complain & tf_error) - error ("invalid const_cast of an rvalue of type %qT to type %qT", + error ("invalid %<const_cast%> of an rvalue of type %qT " + "to type %qT", src_type, dst_type); return error_mark_node; } @@ -7857,7 +7861,7 @@ build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain, } if (complain & tf_error) - error ("invalid const_cast from type %qT to type %qT", + error ("invalid %<const_cast%> from type %qT to type %qT", src_type, dst_type); return error_mark_node; } @@ -9260,7 +9264,7 @@ maybe_warn_about_returning_address_of_local (tree retval) "returning reference to temporary"); else if (is_std_init_list (valtype)) warning_at (loc, OPT_Winit_list_lifetime, - "returning temporary initializer_list does not extend " + "returning temporary %<initializer_list%> does not extend " "the lifetime of the underlying array"); return true; } @@ -9298,7 +9302,7 @@ maybe_warn_about_returning_address_of_local (tree retval) whats_returned); else if (is_std_init_list (valtype)) w = warning_at (loc, OPT_Winit_list_lifetime, - "returning local initializer_list variable %qD " + "returning local %<initializer_list%> variable %qD " "does not extend the lifetime of the underlying array", whats_returned); else if (TREE_CODE (whats_returned) == LABEL_DECL) @@ -9654,7 +9658,7 @@ check_return_expr (tree retval, bool *no_warning) && ! flag_check_new && retval && null_ptr_cst_p (retval)) warning (0, "%<operator new%> must not return NULL unless it is " - "declared %<throw()%> (or -fcheck-new is in effect)"); + "declared %<throw()%> (or %<-fcheck-new%> is in effect)"); /* Effective C++ rule 15. See also start_function. */ if (warn_ecpp diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 618eed9..e9f759d 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -360,7 +360,7 @@ abstract_virtuals_error_sfinae (tree decl, tree type, abstract_class_use use, "be used in throw-expression", type); break; case ACU_CATCH: - error ("cannot declare catch parameter to be of abstract " + error ("cannot declare %<catch%> parameter to be of abstract " "class type %qT", type); break; default: @@ -380,7 +380,7 @@ abstract_virtuals_error_sfinae (tree decl, tree type, abstract_class_use use, FOR_EACH_VEC_ELT (*pure, ix, fn) if (! DECL_CLONED_FUNCTION_P (fn) || DECL_COMPLETE_DESTRUCTOR_P (fn)) - inform (DECL_SOURCE_LOCATION (fn), "\t%#qD", fn); + inform (DECL_SOURCE_LOCATION (fn), " %#qD", fn); /* Now truncate the vector. This leaves it non-null, so we know there are pure virtuals, but empty so we don't list them out @@ -1164,8 +1164,8 @@ digest_init_r (tree type, tree init, int nested, int flags, be invalid. */ if (size < TREE_STRING_LENGTH (stripped_init)) { - permerror (loc, "initializer-string for array " - "of chars is too long"); + permerror (loc, "initializer-string for %qT is too long", + type); init = build_string (size, TREE_STRING_POINTER (stripped_init)); @@ -2215,7 +2215,7 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain) if (type == error_mark_node) { if (complain & tf_error) - error ("cannot deduce template arguments for %qT from ()", + error ("cannot deduce template arguments for %qT from %<()%>", anode); return error_mark_node; } |