gcc/cp * call.c (build_integral_nontype_arg_conv): Remove use of EXPR_LOC_OR_HERE macro. (convert_like_real): Likewise. (convert_arg_to_ellipsis): Likewise. (build_cxx_call): Likewise. (perform_implicit_conversion_flags): Likewise. (initialize_reference): Likewise. * cvt.c (cp_convert_to_pointer): Likewise. (convert_to_reference): Likewise. (ocp_convert): Likewise. (convert_to_void): Likewise. * decl.c (pop_label): Update comment. (pop_switch): Remove use of EXPR_LOC_OR_HERE macro. (check_tag_decl): Remove use of in_system_header macro. (make_rtl_for_nonlocal_decl): Remove use of input_filename macro. (compute_array_index_type): Remove use of in_system_header macro. (grokdeclarator): Likewise. * error.c (dump_global_iord): Remove use of input_filename macro. (location_of): Remove use of EXPR_LOC_OR_HERE macro. (maybe_warn_cpp0x): Remove use of in_system_header macro. * init.c (build_new_1): Remove use of EXPR_LOC_OR_HERE macro. * lex.c (handle_pragma_interface): Remove use of input_filename macro. (handle_pragma_implementation): Likewise. (cxx_make_type): Likewise. (in_main_input_context): Likewise. * name-lookup.c (push_binding_level): Remove use of input_line macro. (leave_scope): Likewise. (resume_scope): Likewise. * parser.c (cp_parser_unqualified_id): Remove use of in_system_header macro. (cp_parser_cast_expression): Likewise. (cp_parser_declaration_seq_opt): Likewise. (cp_parser_enumerator_list): Likewise. (cp_parser_parameter_declaration_clause): Likewise. (cp_parser_exception_specification_opt): Likewise. * pt.c (unify_arg_conversion): Remove use of EXPR_LOC_OR_HERE macro. (convert_nontype_argument): Likewise. (push_tinst_level): Remove use of in_system_header macro. (tsubst_copy_and_build): Remove use of EXPR_LOC_OR_HERE macros. (do_decl_instantiation): Remove use of in_system_header macro. (do_type_instantiation): Likewise. * semantics.c (finish_call_expr): Remove use of EXPR_LOC_OR_HERE macro. (begin_class_definition): Remove use of input_filename macro. (cxx_eval_call_expression): Remove use of EXPR_LOC_OR_HERE macro. (cxx_eval_constant_expression): Likewise. (potential_constant_expression_1): Likewise. * typeck.c (decay_conversion): Likewise. (rationalize_conditional_expr): Likewise. (build_x_compound_expr_from_list): Likewise. (convert_for_assignment): Likewise. * typeck2.c (check_narrowing): Likewise. --- gcc/cp/call.c | 12 ++++++------ gcc/cp/cvt.c | 8 ++++---- gcc/cp/decl.c | 18 ++++++++++-------- gcc/cp/error.c | 6 +++--- gcc/cp/init.c | 4 ++-- gcc/cp/lex.c | 13 +++++++------ gcc/cp/name-lookup.c | 8 +++++--- gcc/cp/parser.c | 14 ++++++++------ gcc/cp/pt.c | 20 +++++++++++--------- gcc/cp/semantics.c | 15 ++++++++------- gcc/cp/typeck.c | 17 ++++++++++------- gcc/cp/typeck2.c | 4 ++-- 12 files changed, 76 insertions(+), 63 deletions(-)
diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c529c16..935e011 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3687,7 +3687,7 @@ build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain) conversion *conv; void *p; tree t; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (error_operand_p (expr)) return error_mark_node; @@ -5850,7 +5850,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, tree totype = convs->type; diagnostic_t diag_kind; int flags; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (convs->bad_p && !(complain & tf_error)) return error_mark_node; @@ -6263,7 +6263,7 @@ tree convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain) { tree arg_type; - location_t loc = EXPR_LOC_OR_HERE (arg); + location_t loc = EXPR_LOC_OR_LOC (arg, input_location); /* [expr.call] @@ -7168,7 +7168,7 @@ build_cxx_call (tree fn, int nargs, tree *argarray, int optimize_sav; /* Remember roughly where this call is. */ - location_t loc = EXPR_LOC_OR_HERE (fn); + location_t loc = EXPR_LOC_OR_LOC (fn, input_location); fn = build_call_a (fn, nargs, argarray); SET_EXPR_LOCATION (fn, loc); @@ -8979,7 +8979,7 @@ perform_implicit_conversion_flags (tree type, tree expr, { conversion *conv; void *p; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (error_operand_p (expr)) return error_mark_node; @@ -9295,7 +9295,7 @@ initialize_reference (tree type, tree expr, { conversion *conv; void *p; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (type == error_mark_node || error_operand_p (expr)) return error_mark_node; diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 5264c5d..c1dfdcf 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -78,7 +78,7 @@ cp_convert_to_pointer (tree type, tree expr, tsubst_flags_t complain) tree intype = TREE_TYPE (expr); enum tree_code form; tree rval; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (intype == error_mark_node) return error_mark_node; @@ -413,7 +413,7 @@ convert_to_reference (tree reftype, tree expr, int convtype, tree rval = NULL_TREE; tree rval_as_conversion = NULL_TREE; bool can_convert_intype_to_type; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (TREE_CODE (type) == FUNCTION_TYPE && TREE_TYPE (expr) == unknown_type_node) @@ -656,7 +656,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags, enum tree_code code = TREE_CODE (type); const char *invalid_conv_diag; tree e1; - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (error_operand_p (e) || type == error_mark_node) return error_mark_node; @@ -912,7 +912,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags, tree convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain) { - location_t loc = EXPR_LOC_OR_HERE (expr); + location_t loc = EXPR_LOC_OR_LOC (expr, input_location); if (expr == error_mark_node || TREE_TYPE (expr) == error_mark_node) diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 500c81f..40a9a8c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -376,7 +376,8 @@ pop_label (tree label, tree old_value) location_t location; error ("label %q+D used but not defined", label); - location = input_location; /* FIXME want (input_filename, (line)0) */ + location = input_location; + /* FIXME want (LOCATION_FILE (input_location), (line)0) */ /* Avoid crashing later. */ define_label (location, DECL_NAME (label)); } @@ -3092,7 +3093,7 @@ pop_switch (void) location_t switch_location; /* Emit warnings as needed. */ - switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt); + switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location); if (!processing_template_decl) c_do_switch_warnings (cs->cases, switch_location, SWITCH_STMT_TYPE (cs->switch_stmt), @@ -4241,7 +4242,7 @@ check_tag_decl (cp_decl_specifier_seq *declspecs, error ("multiple types in one declaration"); else if (declspecs->redefined_builtin_type) { - if (!in_system_header) + if (!in_system_header_at (input_location)) permerror (declspecs->locations[ds_redefined_builtin_type_spec], "redeclaration of C++ built-in type %qT", declspecs->redefined_builtin_type); @@ -4292,7 +4293,8 @@ check_tag_decl (cp_decl_specifier_seq *declspecs, /* Anonymous unions are objects, so they can have specifiers. */; SET_ANON_AGGR_TYPE_P (declared_type); - if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header) + if (TREE_CODE (declared_type) != UNION_TYPE + && !in_system_header_at (input_location)) pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs"); } @@ -5846,7 +5848,7 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) /* We try to defer namespace-scope static constants so that they are not emitted into the object file unnecessarily. */ - filename = input_filename; + filename = LOCATION_FILE (input_location); if (!DECL_VIRTUAL_P (decl) && TREE_READONLY (decl) && DECL_INITIAL (decl) != NULL_TREE @@ -8309,7 +8311,7 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain) indicated by the state of complain), so that another substitution can be found. */ return error_mark_node; - else if (in_system_header) + else if (in_system_header_at (input_location)) /* Allow them in system headers because glibc uses them. */; else if (name) pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name); @@ -9096,7 +9098,7 @@ grokdeclarator (const cp_declarator *declarator, if (type_was_error_mark_node) /* We've already issued an error, don't complain more. */; - else if (in_system_header || flag_ms_extensions) + else if (in_system_header_at (input_location) || flag_ms_extensions) /* Allow it, sigh. */; else if (! is_main) permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name); @@ -9119,7 +9121,7 @@ grokdeclarator (const cp_declarator *declarator, error ("%<__int128%> is not supported by this target"); explicit_int128 = false; } - else if (pedantic && ! in_system_header) + else if (pedantic && ! in_system_header_at (input_location)) pedwarn (input_location, OPT_Wpedantic, "ISO C++ does not support %<__int128%> for %qs", name); } diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 5481523..72aa936 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -924,7 +924,7 @@ dump_global_iord (cxx_pretty_printer *pp, tree t) else gcc_unreachable (); - pp_printf (pp, p, input_filename); + pp_printf (pp, p, LOCATION_FILE (input_location)); } static void @@ -2804,7 +2804,7 @@ location_of (tree t) if (DECL_P (t)) return DECL_SOURCE_LOCATION (t); - return EXPR_LOC_OR_HERE (t); + return EXPR_LOC_OR_LOC (t, input_location); } /* Now the interfaces from error et al to dump_type et al. Each takes an @@ -3463,7 +3463,7 @@ cp_printer (pretty_printer *pp, text_info *text, const char *spec, void maybe_warn_cpp0x (cpp0x_warn_str str) { - if ((cxx_dialect == cxx98) && !in_system_header) + if ((cxx_dialect == cxx98) && !in_system_header_at (input_location)) /* We really want to suppress this warning in system headers, because libstdc++ uses variadic templates even when we aren't in C++0x mode. */ diff --git a/gcc/cp/init.c b/gcc/cp/init.c index fd43a4f..29ed2a9 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2319,7 +2319,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, { if (complain & tf_error) { - error_at (EXPR_LOC_OR_HERE (inner_nelts), + error_at (EXPR_LOC_OR_LOC (inner_nelts, input_location), "array size in operator new must be constant"); cxx_constant_value(inner_nelts); } @@ -2347,7 +2347,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, && !TREE_CONSTANT (maybe_constant_value (outer_nelts))) { if (complain & tf_warning_or_error) - pedwarn(EXPR_LOC_OR_HERE (outer_nelts), OPT_Wvla, + pedwarn(EXPR_LOC_OR_LOC (outer_nelts, input_location), OPT_Wvla, "ISO C++ does not support variable-length array types"); else return error_mark_node; diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index 5d8a313..2d517a4 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -352,18 +352,18 @@ handle_pragma_interface (cpp_reader* /*dfile*/) if (fname == error_mark_node) return; else if (fname == 0) - filename = lbasename (input_filename); + filename = lbasename (LOCATION_FILE (input_location)); else filename = TREE_STRING_POINTER (fname); - finfo = get_fileinfo (input_filename); + finfo = get_fileinfo (LOCATION_FILE (input_location)); if (impl_file_chain == 0) { /* If this is zero at this point, then we are auto-implementing. */ if (main_input_filename == 0) - main_input_filename = input_filename; + main_input_filename = LOCATION_FILE (input_location); } finfo->interface_only = interface_strcmp (filename); @@ -397,7 +397,7 @@ handle_pragma_implementation (cpp_reader* /*dfile*/) if (main_input_filename) filename = main_input_filename; else - filename = input_filename; + filename = LOCATION_FILE (input_location); filename = lbasename (filename); } else @@ -683,7 +683,8 @@ cxx_make_type (enum tree_code code) /* Set up some flags that give proper default behavior. */ if (RECORD_OR_UNION_CODE_P (code)) { - struct c_fileinfo *finfo = get_fileinfo (input_filename); + struct c_fileinfo *finfo = \ + get_fileinfo (LOCATION_FILE (input_location)); SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown); CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only; } @@ -711,5 +712,5 @@ in_main_input_context (void) return filename_cmp (main_input_filename, LOCATION_FILE (tl->locus)) == 0; else - return filename_cmp (main_input_filename, input_filename) == 0; + return filename_cmp (main_input_filename, LOCATION_FILE (input_location)) == 0; } diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index d0c024a..f527638 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1504,7 +1504,8 @@ push_binding_level (cp_binding_level *scope) { scope->binding_depth = binding_depth; indent (binding_depth); - cp_binding_level_debug (scope, input_line, "push"); + cp_binding_level_debug (scope, LOCATION_LINE (input_location), + "push"); binding_depth++; } } @@ -1590,7 +1591,8 @@ leave_scope (void) if (ENABLE_SCOPE_CHECKING) { indent (--binding_depth); - cp_binding_level_debug (scope, input_line, "leave"); + cp_binding_level_debug (scope, LOCATION_LINE (input_location), + "leave"); } /* Move one nesting level up. */ @@ -1639,7 +1641,7 @@ resume_scope (cp_binding_level* b) { b->binding_depth = binding_depth; indent (binding_depth); - cp_binding_level_debug (b, input_line, "resume"); + cp_binding_level_debug (b, LOCATION_LINE (input_location), "resume"); binding_depth++; } } diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 977adf6..b06ce96 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5088,7 +5088,8 @@ cp_parser_unqualified_id (cp_parser* parser, { /* 17.6.3.3.5 */ const char *name = UDLIT_OP_SUFFIX (id); - if (name[0] != '_' && !in_system_header && declarator_p) + if (name[0] != '_' && !in_system_header_at (input_location) + && declarator_p) warning (0, "literal operator suffixes not preceded by %<_%>" " are reserved for future standardization"); } @@ -7686,7 +7687,7 @@ cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p, /* Warn about old-style casts, if so requested. */ if (warn_old_style_cast - && !in_system_header + && !in_system_header_at (input_location) && !VOID_TYPE_P (type) && current_lang_name != lang_name_c) warning (OPT_Wold_style_cast, "use of old-style cast"); @@ -10765,7 +10766,7 @@ cp_parser_declaration_seq_opt (cp_parser* parser) /* A declaration consisting of a single semicolon is invalid. Allow it unless we're being pedantic. */ cp_lexer_consume_token (parser->lexer); - if (!in_system_header) + if (!in_system_header_at (input_location)) pedwarn (input_location, OPT_Wpedantic, "extra %<;%>"); continue; } @@ -15527,7 +15528,7 @@ cp_parser_enumerator_list (cp_parser* parser, tree type) /* If the next token is a `}', there is a trailing comma. */ if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)) { - if (cxx_dialect < cxx11 && !in_system_header) + if (cxx_dialect < cxx11 && !in_system_header_at (input_location)) pedwarn (input_location, OPT_Wpedantic, "comma at end of enumerator list"); break; @@ -18056,7 +18057,8 @@ cp_parser_parameter_declaration_clause (cp_parser* parser) /* There are no parameters. */ { #ifndef NO_IMPLICIT_EXTERN_C - if (in_system_header && current_class_type == NULL + if (in_system_header_at (input_location) + && current_class_type == NULL && current_lang_name == lang_name_c) return NULL_TREE; else @@ -20793,7 +20795,7 @@ cp_parser_exception_specification_opt (cp_parser* parser) #if 0 /* Enable this once a lot of code has transitioned to noexcept? */ - if (cxx_dialect >= cxx11 && !in_system_header) + if (cxx_dialect >= cxx11 && !in_system_header_at (input_location)) warning (OPT_Wdeprecated, "dynamic exception specifications are " "deprecated in C++0x; use %<noexcept%> instead"); #endif diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index bbf8f55..96343ed 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5437,7 +5437,7 @@ unify_arg_conversion (bool explain_p, tree to_type, tree from_type, tree arg) { if (explain_p) - inform (EXPR_LOC_OR_HERE (arg), + inform (EXPR_LOC_OR_LOC (arg, input_location), " cannot convert %qE (type %qT) to type %qT", arg, from_type, to_type); return 1; @@ -5677,7 +5677,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) return NULL_TREE; expr = cxx_constant_value (expr); if (errorcount > errs || warningcount + werrorcount > warns) - inform (EXPR_LOC_OR_HERE (expr), + inform (EXPR_LOC_OR_LOC (expr, input_location), "in template argument for type %qT ", type); if (expr == error_mark_node) return NULL_TREE; @@ -8093,7 +8093,7 @@ push_tinst_level (tree d) new_level->decl = d; new_level->locus = input_location; new_level->errors = errorcount+sorrycount; - new_level->in_system_header_p = in_system_header; + new_level->in_system_header_p = in_system_header_at (input_location); new_level->next = current_tinst_level; current_tinst_level = new_level; @@ -14505,7 +14505,7 @@ tsubst_copy_and_build (tree t, fn = TREE_OPERAND (fn, 1); if (is_overloaded_fn (fn)) fn = get_first_fn (fn); - if (permerror (EXPR_LOC_OR_HERE (t), + if (permerror (EXPR_LOC_OR_LOC (t, input_location), "%qD was not declared in this scope, " "and no declarations were found by " "argument-dependent lookup at the point " @@ -14515,15 +14515,17 @@ tsubst_copy_and_build (tree t, /* Can't say anything more. */; else if (DECL_CLASS_SCOPE_P (fn)) { - inform (EXPR_LOC_OR_HERE (t), + location_t loc = EXPR_LOC_OR_LOC (t, + input_location); + inform (loc, "declarations in dependent base %qT are " "not found by unqualified lookup", DECL_CLASS_CONTEXT (fn)); if (current_class_ptr) - inform (EXPR_LOC_OR_HERE (t), + inform (loc, "use %<this->%D%> instead", function); else - inform (EXPR_LOC_OR_HERE (t), + inform (loc, "use %<%T::%D%> instead", current_class_name, function); } @@ -18807,7 +18809,7 @@ do_decl_instantiation (tree decl, tree storage) ; else if (storage == ridpointers[(int) RID_EXTERN]) { - if (!in_system_header && (cxx_dialect == cxx98)) + if (!in_system_header_at (input_location) && (cxx_dialect == cxx98)) pedwarn (input_location, OPT_Wpedantic, "ISO C++ 1998 forbids the use of %<extern%> on explicit " "instantiations"); @@ -18900,7 +18902,7 @@ do_type_instantiation (tree t, tree storage, tsubst_flags_t complain) if (storage != NULL_TREE) { - if (!in_system_header) + if (!in_system_header_at (input_location)) { if (storage == ridpointers[(int) RID_EXTERN]) { diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 11f7812..907bd0c 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2146,7 +2146,7 @@ finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual, && type_dependent_expression_p (current_class_ref))) { result = build_nt_call_vec (fn, *args); - SET_EXPR_LOCATION (result, EXPR_LOC_OR_HERE (fn)); + SET_EXPR_LOCATION (result, EXPR_LOC_OR_LOC (fn, input_location)); KOENIG_LOOKUP_P (result) = koenig_p; if (cfun) { @@ -2721,7 +2721,8 @@ begin_class_definition (tree t) before. */ if (! TYPE_ANONYMOUS_P (t)) { - struct c_fileinfo *finfo = get_fileinfo (input_filename); + struct c_fileinfo *finfo = \ + get_fileinfo (LOCATION_FILE (input_location)); CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only; SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown); @@ -8278,7 +8279,7 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t, bool allow_non_constant, bool addr, bool *non_constant_p, bool *overflow_p) { - location_t loc = EXPR_LOC_OR_HERE (t); + location_t loc = EXPR_LOC_OR_LOC (t, input_location); tree fun = get_function_named_in_call (t); tree result; constexpr_call new_call = { NULL, NULL, NULL, 0 }; @@ -9659,7 +9660,7 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t, && !integer_zerop (op)) { if (!allow_non_constant) - error_at (EXPR_LOC_OR_HERE (t), + error_at (EXPR_LOC_OR_LOC (t, input_location), "reinterpret_cast from integer to pointer"); *non_constant_p = true; return t; @@ -9705,7 +9706,7 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t, case EXPR_STMT: case OFFSET_REF: if (!allow_non_constant) - error_at (EXPR_LOC_OR_HERE (t), + error_at (EXPR_LOC_OR_LOC (t, input_location), "expression %qE is not a constant-expression", t); *non_constant_p = true; break; @@ -9978,7 +9979,7 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags) { if (flags & tf_error) { - error_at (EXPR_LOC_OR_HERE (t), + error_at (EXPR_LOC_OR_LOC (t, input_location), "call to non-constexpr function %qD", fun); explain_invalid_constexpr_fn (fun); } @@ -10070,7 +10071,7 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags) && !integer_zerop (from)) { if (flags & tf_error) - error_at (EXPR_LOC_OR_HERE (t), + error_at (EXPR_LOC_OR_LOC (t, input_location), "reinterpret_cast from integer to pointer"); return false; } diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index c9ddbe9..493453b 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1883,7 +1883,7 @@ decay_conversion (tree exp, tsubst_flags_t complain) { tree type; enum tree_code code; - location_t loc = EXPR_LOC_OR_HERE (exp); + location_t loc = EXPR_LOC_OR_LOC (exp, input_location); type = TREE_TYPE (exp); if (type == error_mark_node) @@ -2133,6 +2133,8 @@ static tree rationalize_conditional_expr (enum tree_code code, tree t, tsubst_flags_t complain) { + location_t loc = EXPR_LOC_OR_LOC (t, input_location); + /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that the first operand is always the one to be used if both operands are equal, so we know what conditional expression this used to be. */ @@ -2145,8 +2147,8 @@ rationalize_conditional_expr (enum tree_code code, tree t, gcc_assert (!TREE_SIDE_EFFECTS (op0) && !TREE_SIDE_EFFECTS (op1)); return - build_conditional_expr (EXPR_LOC_OR_HERE (t), - build_x_binary_op (EXPR_LOC_OR_HERE (t), + build_conditional_expr (loc, + build_x_binary_op (loc, (TREE_CODE (t) == MIN_EXPR ? LE_EXPR : GE_EXPR), op0, TREE_CODE (op0), @@ -2159,7 +2161,7 @@ rationalize_conditional_expr (enum tree_code code, tree t, } return - build_conditional_expr (EXPR_LOC_OR_HERE (t), TREE_OPERAND (t, 0), + build_conditional_expr (loc, TREE_OPERAND (t, 0), cp_build_unary_op (code, TREE_OPERAND (t, 1), 0, complain), cp_build_unary_op (code, TREE_OPERAND (t, 2), 0, @@ -6042,8 +6044,9 @@ build_x_compound_expr_from_list (tree list, expr_list_kind exp, && !CONSTRUCTOR_IS_DIRECT_INIT (expr)) { if (complain & tf_error) - pedwarn (EXPR_LOC_OR_HERE (expr), 0, "list-initializer for " - "non-class type must not be parenthesized"); + pedwarn (EXPR_LOC_OR_LOC (expr, input_location), 0, + "list-initializer for non-class type must not " + "be parenthesized"); else return error_mark_node; } @@ -8101,7 +8104,7 @@ convert_for_assignment (tree type, tree rhs, && TREE_CODE (TREE_TYPE (rhs)) != BOOLEAN_TYPE && (complain & tf_warning)) { - location_t loc = EXPR_LOC_OR_HERE (rhs); + location_t loc = EXPR_LOC_OR_LOC (rhs, input_location); warning_at (loc, OPT_Wparentheses, "suggest parentheses around assignment used as truth value"); diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 0f3b01d..9fa201d 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -896,11 +896,11 @@ check_narrowing (tree type, tree init) if (!ok) { if (cxx_dialect >= cxx11) - pedwarn (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing, + pedwarn (EXPR_LOC_OR_LOC (init, input_location), OPT_Wnarrowing, "narrowing conversion of %qE from %qT to %qT inside { }", init, ftype, type); else - warning_at (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing, + warning_at (EXPR_LOC_OR_LOC (init, input_location), OPT_Wnarrowing, "narrowing conversion of %qE from %qT to %qT inside { } " "is ill-formed in C++11", init, ftype, type); } -- 1.7.11.7