diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-11-25 13:49:50 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-11-25 13:49:50 +0000 |
commit | 3554d8ffc5a55f4173feb30619fab4131ba46032 (patch) | |
tree | 79354a0db21e81c61cc65750b8bcd25d5a9cc10b /gcc/cp | |
parent | 5b8d9367684f266c30c280b4d3c98830a88c70ab (diff) | |
download | gcc-3554d8ffc5a55f4173feb30619fab4131ba46032.zip gcc-3554d8ffc5a55f4173feb30619fab4131ba46032.tar.gz gcc-3554d8ffc5a55f4173feb30619fab4131ba46032.tar.bz2 |
typeck.c (cp_build_indirect_ref_1): Add location_t parameter and use it in error messages.
/gcc
2019-11-25 Paolo Carlini <paolo.carlini@oracle.com>
* typeck.c (cp_build_indirect_ref_1): Add location_t parameter
and use it in error messages.
(build_x_indirect_ref): Adjust call.
(build_indirect_ref): Likewise.
(cp_build_fold_indirect_ref): Likewise.
(cp_build_array_ref): Likewise.
* call.c (build_new_op_1): Likewise.
* semantics.c (finish_omp_clauses): Likewise.
(finish_omp_depobj): Likewise.
* typeck2.c (build_x_arrow): Likewise.
* cp-tree.h (cp_build_indirect_ref): Update declaration.
* call.c (build_new_op_1): Use location argument in warning_at.
* typeck.c (cp_build_modify_expr): Consistently use the
location_t argument.
/libcc1
2019-11-25 Paolo Carlini <paolo.carlini@oracle.com>
* libcp1plugin.cc (plugin_pragma_push_user_expression): Update
cp_build_indirect_ref call.
/gcc/testsuite
2019-11-25 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/diagnostic/base-operand-non-pointer-1.C: New.
* g++.dg/pr53055.C: Check location too.
* g++.old-deja/g++.bugs/900213_02.C: Likewise.
* g++.old-deja/g++.bugs/900215_02.C: Likewise.
* g++.old-deja/g++.other/badarrow.C: Likewise.
* g++.old-deja/g++.other/deref1.C: Likewise.
* g++.dg/warn/Wenum-compare.C: Check location too.
* g++.dg/cpp0x/initlist26.C: Check location too.
* g++.dg/cpp0x/initlist28.C: Likewise.
* g++.dg/cpp0x/initlist29.C: Likewise.
* g++.dg/cpp0x/initlist33.C: Likewise.
* g++.dg/expr/string-2.C: Likewise.
* g++.dg/other/ptrmem5.C: Likewise.
* g++.old-deja/g++.benjamin/14664-1.C: Likewise.
* g++.old-deja/g++.benjamin/14664-2.C: Likewise.
* g++.old-deja/g++.brendan/init12.C: Likewise.
* g++.old-deja/g++.bugs/900324_04.C: Likewise.
* g++.old-deja/g++.ext/array1.C: Likewise.
* g++.old-deja/g++.jason/rfg17.C: Likewise.
From-SVN: r278685
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/cp/call.c | 15 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 8 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 5 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 49 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 2 |
6 files changed, 62 insertions, 36 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 33e2cfe..fe912c6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,22 @@ +2019-11-25 Paolo Carlini <paolo.carlini@oracle.com> + + * typeck.c (cp_build_indirect_ref_1): Add location_t parameter + and use it in error messages. + (build_x_indirect_ref): Adjust call. + (build_indirect_ref): Likewise. + (cp_build_fold_indirect_ref): Likewise. + (cp_build_array_ref): Likewise. + * call.c (build_new_op_1): Likewise. + * semantics.c (finish_omp_clauses): Likewise. + (finish_omp_depobj): Likewise. + * typeck2.c (build_x_arrow): Likewise. + * cp-tree.h (cp_build_indirect_ref): Update declaration. + + * call.c (build_new_op_1): Use location argument in warning_at. + + * typeck.c (cp_build_modify_expr): Consistently use the + location_t argument. + 2019-11-23 Bernd Edlinger <bernd.edlinger@hotmail.de> PR c++/92365 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index cccb90f..8bfe336 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6354,11 +6354,9 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags, && (TYPE_MAIN_VARIANT (arg1_type) != TYPE_MAIN_VARIANT (arg2_type)) && (complain & tf_warning)) - { - warning (OPT_Wenum_compare, - "comparison between %q#T and %q#T", - arg1_type, arg2_type); - } + warning_at (loc, OPT_Wenum_compare, + "comparison between %q#T and %q#T", + arg1_type, arg2_type); break; default: break; @@ -6416,7 +6414,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags, return cp_build_modify_expr (loc, arg1, code2, arg2, complain); case INDIRECT_REF: - return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain); + return cp_build_indirect_ref (loc, arg1, RO_UNARY_STAR, complain); case TRUTH_ANDIF_EXPR: case TRUTH_ORIF_EXPR: @@ -6472,8 +6470,9 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags, return cp_build_array_ref (input_location, arg1, arg2, complain); case MEMBER_REF: - return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR, - complain), + return build_m_component_ref (cp_build_indirect_ref (loc, arg1, + RO_ARROW_STAR, + complain), arg2, complain); /* The caller will deal with these. */ diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index d6e9357..0da1ed4 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7482,9 +7482,11 @@ extern tree build_class_member_access_expr (cp_expr, tree, tree, bool, extern tree finish_class_member_access_expr (cp_expr, tree, bool, tsubst_flags_t); extern tree build_x_indirect_ref (location_t, tree, - ref_operator, tsubst_flags_t); -extern tree cp_build_indirect_ref (tree, ref_operator, - tsubst_flags_t); + ref_operator, + tsubst_flags_t); +extern tree cp_build_indirect_ref (location_t, tree, + ref_operator, + tsubst_flags_t); extern tree cp_build_fold_indirect_ref (tree); extern tree build_array_ref (location_t, tree, tree); extern tree cp_build_array_ref (location_t, tree, tree, diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 2adc9ef..16180f5 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7193,7 +7193,8 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort) remove = true; else { - t = cp_build_indirect_ref (addr, RO_UNARY_STAR, + t = cp_build_indirect_ref (OMP_CLAUSE_LOCATION (c), + addr, RO_UNARY_STAR, tf_warning_or_error); if (t == error_mark_node) remove = true; @@ -9328,7 +9329,7 @@ finish_omp_depobj (location_t loc, tree depobj, if (addr == error_mark_node) depobj = error_mark_node; else - depobj = cp_build_indirect_ref (addr, RO_UNARY_STAR, + depobj = cp_build_indirect_ref (loc, addr, RO_UNARY_STAR, tf_warning_or_error); } diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 100ae8f..bd2292a 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -3278,7 +3278,7 @@ build_x_indirect_ref (location_t loc, tree expr, ref_operator errorstring, rval = build_new_op (loc, INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE, NULL_TREE, &overload, complain); if (!rval) - rval = cp_build_indirect_ref (expr, errorstring, complain); + rval = cp_build_indirect_ref (loc, expr, errorstring, complain); if (processing_template_decl && rval != error_mark_node) { @@ -3296,7 +3296,7 @@ build_x_indirect_ref (location_t loc, tree expr, ref_operator errorstring, constructs. If DO_FOLD is true, fold away INDIRECT_REF of ADDR_EXPR. */ static tree -cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring, +cp_build_indirect_ref_1 (location_t loc, tree ptr, ref_operator errorstring, tsubst_flags_t complain, bool do_fold) { tree pointer, type; @@ -3345,7 +3345,7 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring, /* A pointer to incomplete type (other than cv void) can be dereferenced [expr.unary.op]/1 */ if (complain & tf_error) - error ("%qT is not a pointer-to-object type", type); + error_at (loc, "%qT is not a pointer-to-object type", type); return error_mark_node; } else if (do_fold && TREE_CODE (pointer) == ADDR_EXPR @@ -3376,23 +3376,25 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring, switch (errorstring) { case RO_ARRAY_INDEXING: - error ("invalid use of array indexing on pointer to member"); + error_at (loc, + "invalid use of array indexing on pointer to member"); break; case RO_UNARY_STAR: - error ("invalid use of unary %<*%> on pointer to member"); + error_at (loc, "invalid use of unary %<*%> on pointer to member"); break; case RO_IMPLICIT_CONVERSION: - error ("invalid use of implicit conversion on pointer to member"); + error_at (loc, "invalid use of implicit conversion on pointer " + "to member"); break; case RO_ARROW_STAR: - error ("left hand operand of %<->*%> must be a pointer to class, " - "but is a pointer to member of type %qT", type); + error_at (loc, "left hand operand of %<->*%> must be a pointer to " + "class, but is a pointer to member of type %qT", type); break; default: gcc_unreachable (); } else if (pointer != error_mark_node) - invalid_indirection_error (input_location, type, errorstring); + invalid_indirection_error (loc, type, errorstring); return error_mark_node; } @@ -3400,10 +3402,10 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring, /* Entry point used by c-common, which expects folding. */ tree -build_indirect_ref (location_t /*loc*/, - tree ptr, ref_operator errorstring) +build_indirect_ref (location_t loc, tree ptr, ref_operator errorstring) { - return cp_build_indirect_ref_1 (ptr, errorstring, tf_warning_or_error, true); + return cp_build_indirect_ref_1 (loc, ptr, errorstring, + tf_warning_or_error, true); } /* Entry point used by internal indirection needs that don't correspond to any @@ -3412,17 +3414,18 @@ build_indirect_ref (location_t /*loc*/, tree cp_build_fold_indirect_ref (tree pointer) { - return cp_build_indirect_ref_1 (pointer, RO_NULL, tf_warning_or_error, true); + return cp_build_indirect_ref_1 (input_location, pointer, RO_NULL, + tf_warning_or_error, true); } /* Entry point used by indirection needs that correspond to some syntactic construct. */ tree -cp_build_indirect_ref (tree ptr, ref_operator errorstring, +cp_build_indirect_ref (location_t loc, tree ptr, ref_operator errorstring, tsubst_flags_t complain) { - return cp_build_indirect_ref_1 (ptr, errorstring, complain, false); + return cp_build_indirect_ref_1 (loc, ptr, errorstring, complain, false); } /* This handles expressions of the form "a[i]", which denotes @@ -3599,7 +3602,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx, ret = cp_build_binary_op (input_location, PLUS_EXPR, ar, ind, complain); if (first) ret = build2_loc (loc, COMPOUND_EXPR, TREE_TYPE (ret), first, ret); - ret = cp_build_indirect_ref (ret, RO_ARRAY_INDEXING, complain); + ret = cp_build_indirect_ref (loc, ret, RO_ARRAY_INDEXING, complain); protected_set_expr_location (ret, loc); if (non_lvalue) ret = non_lvalue_loc (loc, ret); @@ -8280,7 +8283,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode, if (VOID_TYPE_P (TREE_TYPE (rhs))) { if (complain & tf_error) - error ("void value not ignored as it ought to be"); + error_at (cp_expr_loc_or_loc (rhs, loc), + "void value not ignored as it ought to be"); return error_mark_node; } @@ -8493,7 +8497,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode, if (modifycode != INIT_EXPR) { if (complain & tf_error) - error ("assigning to an array from an initializer list"); + error_at (loc, + "assigning to an array from an initializer list"); return error_mark_node; } if (check_array_initializer (lhs, lhstype, newrhs)) @@ -8520,8 +8525,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode, TYPE_MAIN_VARIANT (TREE_TYPE (newrhs)))) { if (complain & tf_error) - error ("incompatible types in assignment of %qT to %qT", - TREE_TYPE (rhs), lhstype); + error_at (loc, "incompatible types in assignment of %qT to %qT", + TREE_TYPE (rhs), lhstype); return error_mark_node; } @@ -8534,9 +8539,9 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode, if (complain & tf_error) { if (modifycode == INIT_EXPR) - error ("array used as initializer"); + error_at (loc, "array used as initializer"); else - error ("invalid array assignment"); + error_at (loc, "invalid array assignment"); } return error_mark_node; } diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 7a8de4b..b886854 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -2060,7 +2060,7 @@ build_x_arrow (location_t loc, tree expr, tsubst_flags_t complain) return expr; } - return cp_build_indirect_ref (last_rval, RO_ARROW, complain); + return cp_build_indirect_ref (loc, last_rval, RO_ARROW, complain); } if (complain & tf_error) |