aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2019-12-03 20:46:32 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2019-12-03 20:46:32 +0000
commit34dda8045231413589fd1ac4ecd6a9cc97b51278 (patch)
tree4658eb950ddd1ad2c05ffba18f8bd2fcbf828524 /gcc/cp
parentac0573de6cc4099d40263008ace3593d0d0647aa (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/cp/typeck.c45
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)