diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-12-03 20:46:32 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-12-03 20:46:32 +0000 |
commit | 34dda8045231413589fd1ac4ecd6a9cc97b51278 (patch) | |
tree | 4658eb950ddd1ad2c05ffba18f8bd2fcbf828524 /gcc/cp | |
parent | ac0573de6cc4099d40263008ace3593d0d0647aa (diff) | |
download | gcc-34dda8045231413589fd1ac4ecd6a9cc97b51278.zip gcc-34dda8045231413589fd1ac4ecd6a9cc97b51278.tar.gz gcc-34dda8045231413589fd1ac4ecd6a9cc97b51278.tar.bz2 |
typeck.c (cp_build_addr_expr_1): Use the cp_expr_loc_or_input_loc location in a few additional diagnostics; tidy.
/cp
2019-12-03 Paolo Carlini <paolo.carlini@oracle.com>
* typeck.c (cp_build_addr_expr_1): Use the cp_expr_loc_or_input_loc
location in a few additional diagnostics; tidy.
(check_return_expr): Likewise.
* typeck.c (cp_build_addr_expr_1): Use tree_strip_any_location_wrapper
for the address of main pedwarn.
/testsuite
2019-12-03 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/diagnostic/inconsistent-deduction-1.C: New.
* g++.dg/diagnostic/returning-a-value-1.C: Likewise.
* g++.dg/cpp0x/decltype3.C: Check location(s) too.
* g++.dg/cpp0x/decltype4.C: Likewise.
* g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C: Likewise.
* g++.dg/cpp2a/consteval13.C: Likewise.
* g++.dg/expr/pmf-1.C: Likewise.
* g++.dg/other/ptrmem2.C: Likewise.
* g++.dg/template/ptrmem17.C: Likewise.
* g++.old-deja/g++.bugs/900213_03.C: Likewise.
* g++.old-deja/g++.other/pmf7.C: Likewise.
* g++.old-deja/g++.other/ptrmem7.C: Likewise.
* g++.dg/diagnostic/main2.C: New.
From-SVN: r278947
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 45 |
2 files changed, 33 insertions, 21 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 02c730e..3c86cec 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2019-12-03 Paolo Carlini <paolo.carlini@oracle.com> + + * typeck.c (cp_build_addr_expr_1): Use the cp_expr_loc_or_input_loc + location in a few additional diagnostics; tidy. + (check_return_expr): Likewise. + + * typeck.c (cp_build_addr_expr_1): Use tree_strip_any_location_wrapper + for the address of main pedwarn. + 2019-12-03 Jakub Jelinek <jakub@redhat.com> PR c++/91369 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index a9b87ea..3b947c3 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -6070,6 +6070,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) return error_mark_node; argtype = lvalue_type (arg); + location_t loc = cp_expr_loc_or_input_loc (arg); gcc_assert (!(identifier_p (arg) && IDENTIFIER_ANY_OP_P (arg))); @@ -6103,12 +6104,14 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) else if (current_class_type && TREE_OPERAND (arg, 0) == current_class_ref) /* An expression like &memfn. */ - permerror (input_location, "ISO C++ forbids taking the address of an unqualified" + permerror (loc, + "ISO C++ forbids taking the address of an unqualified" " or parenthesized non-static member function to form" " a pointer to member function. Say %<&%T::%D%>", base, name); else - permerror (input_location, "ISO C++ forbids taking the address of a bound member" + permerror (loc, + "ISO C++ forbids taking the address of a bound member" " function to form a pointer to member function." " Say %<&%T::%D%>", base, name); @@ -6135,7 +6138,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) if (kind == clk_none) { if (complain & tf_error) - lvalue_error (cp_expr_loc_or_input_loc (arg), lv_addressof); + lvalue_error (loc, lv_addressof); return error_mark_node; } if (strict_lvalue && (kind & (clk_rvalueref|clk_class))) @@ -6143,8 +6146,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) if (!(complain & tf_error)) return error_mark_node; /* Make this a permerror because we used to accept it. */ - permerror (cp_expr_loc_or_input_loc (arg), - "taking address of rvalue"); + permerror (loc, "taking address of rvalue"); } } @@ -6154,13 +6156,13 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) arg = build1 (CONVERT_EXPR, type, arg); return arg; } - else if (pedantic && DECL_MAIN_P (arg)) + else if (pedantic && DECL_MAIN_P (tree_strip_any_location_wrapper (arg))) { /* ARM $3.4 */ /* Apparently a lot of autoconf scripts for C++ packages do this, so only complain if -Wpedantic. */ if (complain & (flag_pedantic_errors ? tf_error : tf_warning)) - pedwarn (input_location, OPT_Wpedantic, + pedwarn (loc, OPT_Wpedantic, "ISO C++ forbids taking address of function %<::main%>"); else if (flag_pedantic_errors) return error_mark_node; @@ -6218,7 +6220,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) if (TYPE_REF_P (TREE_TYPE (t))) { if (complain & tf_error) - error ("cannot create pointer to reference member %qD", t); + error_at (loc, + "cannot create pointer to reference member %qD", t); return error_mark_node; } @@ -6238,8 +6241,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) if (bitfield_p (arg)) { if (complain & tf_error) - error_at (cp_expr_loc_or_input_loc (arg), - "attempt to take address of bit-field"); + error_at (loc, "attempt to take address of bit-field"); return error_mark_node; } @@ -6254,8 +6256,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) || !DECL_IMMEDIATE_FUNCTION_P (current_function_decl))) { if (complain & tf_error) - error ("taking address of an immediate function %qD", - stripped_arg); + error_at (loc, "taking address of an immediate function %qD", + stripped_arg); return error_mark_node; } if (TREE_CODE (stripped_arg) == FUNCTION_DECL @@ -9676,6 +9678,7 @@ check_return_expr (tree retval, bool *no_warning) the declared type is incomplete. */ tree functype; int fn_returns_value_p; + location_t loc = cp_expr_loc_or_input_loc (retval); *no_warning = false; @@ -9689,7 +9692,7 @@ check_return_expr (tree retval, bool *no_warning) if (DECL_DESTRUCTOR_P (current_function_decl)) { if (retval) - error ("returning a value from a destructor"); + error_at (loc, "returning a value from a destructor"); return NULL_TREE; } else if (DECL_CONSTRUCTOR_P (current_function_decl)) @@ -9700,7 +9703,7 @@ check_return_expr (tree retval, bool *no_warning) error ("cannot return from a handler of a function-try-block of a constructor"); else if (retval) /* You can't return a value from a constructor. */ - error ("returning a value from a constructor"); + error_at (loc, "returning a value from a constructor"); return NULL_TREE; } @@ -9762,11 +9765,11 @@ check_return_expr (tree retval, bool *no_warning) else if (!same_type_p (type, functype)) { if (LAMBDA_FUNCTION_P (current_function_decl)) - error ("inconsistent types %qT and %qT deduced for " - "lambda return type", functype, type); + error_at (loc, "inconsistent types %qT and %qT deduced for " + "lambda return type", functype, type); else - error ("inconsistent deduction for auto return type: " - "%qT and then %qT", functype, type); + error_at (loc, "inconsistent deduction for auto return type: " + "%qT and then %qT", functype, type); } functype = type; } @@ -9800,8 +9803,7 @@ check_return_expr (tree retval, bool *no_warning) its side-effects. */ finish_expr_stmt (retval); else if (retval != error_mark_node) - permerror (input_location, - "return-statement with a value, in function " + permerror (loc, "return-statement with a value, in function " "returning %qT", valtype); current_function_returns_null = 1; @@ -9857,7 +9859,8 @@ check_return_expr (tree retval, bool *no_warning) } if (warn) - warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>"); + warning_at (loc, OPT_Weffc__, + "%<operator=%> should return a reference to %<*this%>"); } if (dependent_type_p (functype) |