diff options
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 9891978..a6d26ef 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -4975,6 +4975,8 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) tree valist = TREE_OPERAND (*expr_p, 0); tree type = TREE_TYPE (*expr_p); tree t; + location_t loc = EXPR_HAS_LOCATION (*expr_p) ? EXPR_LOCATION (*expr_p) : + UNKNOWN_LOCATION; /* Verify that valist is of the proper type. */ have_va_type = TREE_TYPE (valist); @@ -4984,7 +4986,7 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) if (have_va_type == NULL_TREE) { - error ("first argument to %<va_arg%> not of type %<va_list%>"); + error_at (loc, "first argument to %<va_arg%> not of type %<va_list%>"); return GS_ERROR; } @@ -4999,19 +5001,20 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) /* Unfortunately, this is merely undefined, rather than a constraint violation, so we cannot make this an error. If this call is never executed, the program is still strictly conforming. */ - warned = warning (0, "%qT is promoted to %qT when passed through %<...%>", - type, promoted_type); + warned = warning_at (loc, 0, + "%qT is promoted to %qT when passed through %<...%>", + type, promoted_type); if (!gave_help && warned) { gave_help = true; - inform (input_location, "(so you should pass %qT not %qT to %<va_arg%>)", - promoted_type, type); + inform (loc, "(so you should pass %qT not %qT to %<va_arg%>)", + promoted_type, type); } /* We can, however, treat "undefined" any way we please. Call abort to encourage the user to fix the program. */ if (warned) - inform (input_location, "if this code is reached, the program will abort"); + inform (loc, "if this code is reached, the program will abort"); /* Before the abort, allow the evaluation of the va_list expression to exit or longjmp. */ gimplify_and_add (valist, pre_p); @@ -5984,7 +5987,8 @@ expand_builtin_fork_or_exec (tree fn, tree exp, rtx target, int ignore) gcc_unreachable (); } - decl = build_decl (FUNCTION_DECL, id, TREE_TYPE (fn)); + decl = build_decl (DECL_SOURCE_LOCATION (fn), + FUNCTION_DECL, id, TREE_TYPE (fn)); DECL_EXTERNAL (decl) = 1; TREE_PUBLIC (decl) = 1; DECL_ARTIFICIAL (decl) = 1; @@ -6050,6 +6054,7 @@ expand_builtin_sync_operation (enum machine_mode mode, tree exp, { rtx val, mem; enum machine_mode old_mode; + location_t loc = EXPR_LOCATION (exp); if (code == NOT && warn_sync_nand) { @@ -6070,8 +6075,7 @@ expand_builtin_sync_operation (enum machine_mode mode, tree exp, break; fndecl = implicit_built_in_decls[BUILT_IN_FETCH_AND_NAND_N]; - inform (input_location, - "%qD changed semantics in GCC 4.4", fndecl); + inform (loc, "%qD changed semantics in GCC 4.4", fndecl); warned_f_a_n = true; break; @@ -6085,8 +6089,7 @@ expand_builtin_sync_operation (enum machine_mode mode, tree exp, break; fndecl = implicit_built_in_decls[BUILT_IN_NAND_AND_FETCH_N]; - inform (input_location, - "%qD changed semantics in GCC 4.4", fndecl); + inform (loc, "%qD changed semantics in GCC 4.4", fndecl); warned_n_a_f = true; break; |