From b77c16f9dd7875cf0927365ac386ac9d80967328 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sat, 2 Nov 2019 09:13:37 +0000 Subject: [PATCH] typeck.c (composite_pointer_type): Add a const op_location_t& parameter and use it in diagnostics. /cp 2019-11-02 Paolo Carlini * typeck.c (composite_pointer_type): Add a const op_location_t& parameter and use it in diagnostics. (composite_pointer_error): Likewise. (composite_pointer_type_r): Add a const op_location_t& parameter and forward it. (cp_build_binary_op): Adjust calls. (common_pointer_type): Likewise. * call.c (add_builtin_candidate): Likewise. (build_conditional_expr_1): Likewise. * cp-tree.h (composite_pointer_type): Update declaration. * typeck.c (cxx_sizeof_expr): Use cp_expr_loc_or_input_loc in permerror. (cxx_alignof_expr): Likewise. (lvalue_or_else): Likewise. /testsuite 2019-11-02 Paolo Carlini * g++.dg/conversion/ptrmem9.C: Check location. * g++.dg/expr/cond2.C: Likewise. * g++.dg/warn/Waddress-1.C: Check locations. * g++.old-deja/g++.bugs/900324_02.C: Check location. * g++.old-deja/g++.jason/rfg20.C: Likewise. * g++.old-deja/g++.law/typeck1.C: Likewise. * g++.old-deja/g++.rfg/00321_01-.C: Likewise. * g++.old-deja/g++.rfg/00324_02-.C: Likewise. * g++.dg/diagnostic/alignof1.C: New. * g++.dg/expr/sizeof1.C: Check location. * g++.dg/cpp0x/rv-lvalue-req.C: Check locations. From-SVN: r277743 --- gcc/cp/ChangeLog | 18 ++++ gcc/cp/call.c | 6 +- gcc/cp/cp-tree.h | 3 +- gcc/cp/typeck.c | 86 +++++++++++-------- gcc/testsuite/ChangeLog | 15 ++++ gcc/testsuite/g++.dg/conversion/ptrmem9.C | 2 +- gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C | 6 +- gcc/testsuite/g++.dg/diagnostic/alignof1.C | 5 ++ gcc/testsuite/g++.dg/expr/cond2.C | 2 +- gcc/testsuite/g++.dg/expr/sizeof1.C | 2 +- gcc/testsuite/g++.dg/warn/Waddress-1.C | 62 ++++++------- .../g++.old-deja/g++.bugs/900324_02.C | 2 +- gcc/testsuite/g++.old-deja/g++.jason/rfg20.C | 2 +- gcc/testsuite/g++.old-deja/g++.law/typeck1.C | 2 +- .../g++.old-deja/g++.rfg/00321_01-.C | 4 +- .../g++.old-deja/g++.rfg/00324_02-.C | 2 +- 16 files changed, 138 insertions(+), 81 deletions(-) create mode 100644 gcc/testsuite/g++.dg/diagnostic/alignof1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7b178e5cef8..42dfc325bfa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,21 @@ +2019-11-02 Paolo Carlini + + * typeck.c (composite_pointer_type): Add a const op_location_t& + parameter and use it in diagnostics. + (composite_pointer_error): Likewise. + (composite_pointer_type_r): Add a const op_location_t& + parameter and forward it. + (cp_build_binary_op): Adjust calls. + (common_pointer_type): Likewise. + * call.c (add_builtin_candidate): Likewise. + (build_conditional_expr_1): Likewise. + * cp-tree.h (composite_pointer_type): Update declaration. + + * typeck.c (cxx_sizeof_expr): Use cp_expr_loc_or_input_loc + in permerror. + (cxx_alignof_expr): Likewise. + (lvalue_or_else): Likewise. + 2019-11-02 Jakub Jelinek * decl.c (omp_declare_variant_finalize_one): Use diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 3dac31a37b9..c1969bceb5c 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3032,7 +3032,8 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code, { if (TYPE_PTR_OR_PTRMEM_P (type1)) { - tree cptype = composite_pointer_type (type1, type2, + tree cptype = composite_pointer_type (input_location, + type1, type2, error_mark_node, error_mark_node, CPO_CONVERSION, @@ -5556,7 +5557,8 @@ build_conditional_expr_1 (const op_location_t &loc, || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type)) || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type))) { - result_type = composite_pointer_type (arg2_type, arg3_type, arg2, + result_type = composite_pointer_type (loc, + arg2_type, arg3_type, arg2, arg3, CPO_CONDITIONAL_EXPR, complain); if (result_type == error_mark_node) diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index eb856394377..4b9aea61931 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7526,7 +7526,8 @@ extern tree build_ptrmemfunc1 (tree, tree, tree); extern void expand_ptrmemfunc_cst (tree, tree *, tree *); extern tree type_after_usual_arithmetic_conversions (tree, tree); extern tree common_pointer_type (tree, tree); -extern tree composite_pointer_type (tree, tree, tree, tree, +extern tree composite_pointer_type (const op_location_t &, + tree, tree, tree, tree, composite_pointer_operation, tsubst_flags_t); extern tree merge_types (tree, tree); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 15529c66b1e..29a2942dcaf 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -450,25 +450,26 @@ type_after_usual_arithmetic_conversions (tree t1, tree t2) } static void -composite_pointer_error (diagnostic_t kind, tree t1, tree t2, +composite_pointer_error (const op_location_t &location, + diagnostic_t kind, tree t1, tree t2, composite_pointer_operation operation) { switch (operation) { case CPO_COMPARISON: - emit_diagnostic (kind, input_location, 0, + emit_diagnostic (kind, location, 0, "comparison between " "distinct pointer types %qT and %qT lacks a cast", t1, t2); break; case CPO_CONVERSION: - emit_diagnostic (kind, input_location, 0, + emit_diagnostic (kind, location, 0, "conversion between " "distinct pointer types %qT and %qT lacks a cast", t1, t2); break; case CPO_CONDITIONAL_EXPR: - emit_diagnostic (kind, input_location, 0, + emit_diagnostic (kind, location, 0, "conditional expression between " "distinct pointer types %qT and %qT lacks a cast", t1, t2); @@ -482,7 +483,8 @@ composite_pointer_error (diagnostic_t kind, tree t1, tree t2, case. See that function for documentation of the parameters. */ static tree -composite_pointer_type_r (tree t1, tree t2, +composite_pointer_type_r (const op_location_t &location, + tree t1, tree t2, composite_pointer_operation operation, tsubst_flags_t complain) { @@ -515,15 +517,16 @@ composite_pointer_type_r (tree t1, tree t2, else if ((TYPE_PTR_P (pointee1) && TYPE_PTR_P (pointee2)) || (TYPE_PTRMEM_P (pointee1) && TYPE_PTRMEM_P (pointee2))) { - result_type = composite_pointer_type_r (pointee1, pointee2, operation, - complain); + result_type = composite_pointer_type_r (location, pointee1, pointee2, + operation, complain); if (result_type == error_mark_node) return error_mark_node; } else { if (complain & tf_error) - composite_pointer_error (DK_PERMERROR, t1, t2, operation); + composite_pointer_error (location, DK_PERMERROR, + t1, t2, operation); else return error_mark_node; result_type = void_type_node; @@ -539,7 +542,8 @@ composite_pointer_type_r (tree t1, tree t2, TYPE_PTRMEM_CLASS_TYPE (t2))) { if (complain & tf_error) - composite_pointer_error (DK_PERMERROR, t1, t2, operation); + composite_pointer_error (location, DK_PERMERROR, + t1, t2, operation); else return error_mark_node; } @@ -563,7 +567,8 @@ composite_pointer_type_r (tree t1, tree t2, pointers-to-members as per [expr.eq]. */ tree -composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, +composite_pointer_type (const op_location_t &location, + tree t1, tree t2, tree arg1, tree arg2, composite_pointer_operation operation, tsubst_flags_t complain) { @@ -605,17 +610,17 @@ composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, switch (operation) { case CPO_COMPARISON: - pedwarn (input_location, OPT_Wpedantic, + pedwarn (location, OPT_Wpedantic, "ISO C++ forbids comparison between pointer " "of type % and pointer-to-function"); break; case CPO_CONVERSION: - pedwarn (input_location, OPT_Wpedantic, + pedwarn (location, OPT_Wpedantic, "ISO C++ forbids conversion between pointer " "of type % and pointer-to-function"); break; case CPO_CONDITIONAL_EXPR: - pedwarn (input_location, OPT_Wpedantic, + pedwarn (location, OPT_Wpedantic, "ISO C++ forbids conditional expression between " "pointer of type % and " "pointer-to-function"); @@ -672,7 +677,7 @@ composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, else { if (complain & tf_error) - composite_pointer_error (DK_ERROR, t1, t2, operation); + composite_pointer_error (location, DK_ERROR, t1, t2, operation); return error_mark_node; } } @@ -695,19 +700,19 @@ composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, switch (operation) { case CPO_COMPARISON: - error ("comparison between distinct " - "pointer-to-member types %qT and %qT lacks a cast", - t1, t2); + error_at (location, "comparison between distinct " + "pointer-to-member types %qT and %qT lacks a cast", + t1, t2); break; case CPO_CONVERSION: - error ("conversion between distinct " - "pointer-to-member types %qT and %qT lacks a cast", - t1, t2); + error_at (location, "conversion between distinct " + "pointer-to-member types %qT and %qT lacks a cast", + t1, t2); break; case CPO_CONDITIONAL_EXPR: - error ("conditional expression between distinct " - "pointer-to-member types %qT and %qT lacks a cast", - t1, t2); + error_at (location, "conditional expression between distinct " + "pointer-to-member types %qT and %qT lacks a cast", + t1, t2); break; default: gcc_unreachable (); @@ -716,7 +721,7 @@ composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, } } - return composite_pointer_type_r (t1, t2, operation, complain); + return composite_pointer_type_r (location, t1, t2, operation, complain); } /* Return the merged type of two types. @@ -951,7 +956,8 @@ common_pointer_type (tree t1, tree t2) || (TYPE_PTRDATAMEM_P (t1) && TYPE_PTRDATAMEM_P (t2)) || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2))); - return composite_pointer_type (t1, t2, error_mark_node, error_mark_node, + return composite_pointer_type (input_location, t1, t2, + error_mark_node, error_mark_node, CPO_CONVERSION, tf_warning_or_error); } @@ -1768,8 +1774,9 @@ cxx_sizeof_expr (tree e, tsubst_flags_t complain) else if (is_overloaded_fn (e)) { if (complain & tf_error) - permerror (input_location, "ISO C++ forbids applying % to an expression of " - "function type"); + permerror (cp_expr_loc_or_input_loc (e), + "ISO C++ forbids applying % to an expression " + "of function type"); else return error_mark_node; e = char_type_node; @@ -1830,8 +1837,9 @@ cxx_alignof_expr (tree e, tsubst_flags_t complain) else if (is_overloaded_fn (e)) { if (complain & tf_error) - permerror (input_location, "ISO C++ forbids applying %<__alignof%> to an expression of " - "function type"); + permerror (cp_expr_loc_or_input_loc (e), + "ISO C++ forbids applying %<__alignof%> to an expression " + "of function type"); else return error_mark_node; if (TREE_CODE (e) == FUNCTION_DECL) @@ -4935,7 +4943,8 @@ cp_build_binary_op (const op_location_t &location, && TYPE_PTR_P (type1) && integer_zerop (op1))) { if (TYPE_PTR_P (type1)) - result_type = composite_pointer_type (type0, type1, op0, op1, + result_type = composite_pointer_type (location, + type0, type1, op0, op1, CPO_COMPARISON, complain); else result_type = type0; @@ -4958,7 +4967,8 @@ cp_build_binary_op (const op_location_t &location, && TYPE_PTR_P (type0) && integer_zerop (op0))) { if (TYPE_PTR_P (type0)) - result_type = composite_pointer_type (type0, type1, op0, op1, + result_type = composite_pointer_type (location, + type0, type1, op0, op1, CPO_COMPARISON, complain); else result_type = type1; @@ -4976,7 +4986,8 @@ cp_build_binary_op (const op_location_t &location, } else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE) || (TYPE_PTRDATAMEM_P (type0) && TYPE_PTRDATAMEM_P (type1))) - result_type = composite_pointer_type (type0, type1, op0, op1, + result_type = composite_pointer_type (location, + type0, type1, op0, op1, CPO_COMPARISON, complain); else if (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1)) /* One of the operands must be of nullptr_t type. */ @@ -5055,7 +5066,7 @@ cp_build_binary_op (const op_location_t &location, tree delta0; tree delta1; - type = composite_pointer_type (type0, type1, op0, op1, + type = composite_pointer_type (location, type0, type1, op0, op1, CPO_COMPARISON, complain); if (!same_type_p (TREE_TYPE (op0), type)) @@ -5169,7 +5180,8 @@ cp_build_binary_op (const op_location_t &location, && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) shorten = 1; else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) - result_type = composite_pointer_type (type0, type1, op0, op1, + result_type = composite_pointer_type (location, + type0, type1, op0, op1, CPO_COMPARISON, complain); break; @@ -5252,7 +5264,8 @@ cp_build_binary_op (const op_location_t &location, || code1 == ENUMERAL_TYPE)) short_compare = 1; else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) - result_type = composite_pointer_type (type0, type1, op0, op1, + result_type = composite_pointer_type (location, + type0, type1, op0, op1, CPO_COMPARISON, complain); else if (code0 == POINTER_TYPE && null_ptr_cst_p (orig_op1)) { @@ -10378,7 +10391,8 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain) if (!(complain & tf_error)) return 0; /* Make this a permerror because we used to accept it. */ - permerror (input_location, "using rvalue as lvalue"); + permerror (cp_expr_loc_or_input_loc (ref), + "using rvalue as lvalue"); } return 1; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57b5d34e55a..e0e8c9e3d65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2019-11-02 Paolo Carlini + + * g++.dg/conversion/ptrmem9.C: Check location. + * g++.dg/expr/cond2.C: Likewise. + * g++.dg/warn/Waddress-1.C: Check locations. + * g++.old-deja/g++.bugs/900324_02.C: Check location. + * g++.old-deja/g++.jason/rfg20.C: Likewise. + * g++.old-deja/g++.law/typeck1.C: Likewise. + * g++.old-deja/g++.rfg/00321_01-.C: Likewise. + * g++.old-deja/g++.rfg/00324_02-.C: Likewise. + + * g++.dg/diagnostic/alignof1.C: New. + * g++.dg/expr/sizeof1.C: Check location. + * g++.dg/cpp0x/rv-lvalue-req.C: Check locations. + 2019-11-02 Jakub Jelinek * c-c++-common/gomp/declare-variant-12.c: New test. diff --git a/gcc/testsuite/g++.dg/conversion/ptrmem9.C b/gcc/testsuite/g++.dg/conversion/ptrmem9.C index d4a260f9273..09ea57643f5 100644 --- a/gcc/testsuite/g++.dg/conversion/ptrmem9.C +++ b/gcc/testsuite/g++.dg/conversion/ptrmem9.C @@ -22,5 +22,5 @@ void f () pd == pb; pd == pbv; // { dg-error "" } - pd == pc; // { dg-error "comparison between distinct pointer-to-member types" } + pd == pc; // { dg-error "6:comparison between distinct pointer-to-member types" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C b/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C index 10a655dc1e5..b8f7ddd7895 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C @@ -5,8 +5,8 @@ template T&& declval(); int main() { &declval(); // { dg-error "rvalue" } - declval() = declval(); // { dg-error "rvalue" } - declval()++; // { dg-error "rvalue" } - --declval(); // { dg-error "rvalue" } + declval() = declval(); // { dg-error "15:using rvalue as lvalue" } + declval()++; // { dg-error "15:using rvalue as lvalue" } + --declval(); // { dg-error "17:using rvalue as lvalue" } declval() += 1; // { dg-error "rvalue" } } diff --git a/gcc/testsuite/g++.dg/diagnostic/alignof1.C b/gcc/testsuite/g++.dg/diagnostic/alignof1.C new file mode 100644 index 00000000000..705bbf138db --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/alignof1.C @@ -0,0 +1,5 @@ +struct A +{ + int foo() { return __alignof(bar); } // { dg-error "32:ISO C\\+\\+ forbids applying .__alignof." } + int bar(); +}; diff --git a/gcc/testsuite/g++.dg/expr/cond2.C b/gcc/testsuite/g++.dg/expr/cond2.C index 68a26a22f34..93b166330c4 100644 --- a/gcc/testsuite/g++.dg/expr/cond2.C +++ b/gcc/testsuite/g++.dg/expr/cond2.C @@ -8,5 +8,5 @@ struct IsZero : Term { Term* IsZero::eval() { - return true ? new Boolean(false) : this; // { dg-error "conditional expression" } + return true ? new Boolean(false) : this; // { dg-error "15:conditional expression" } } diff --git a/gcc/testsuite/g++.dg/expr/sizeof1.C b/gcc/testsuite/g++.dg/expr/sizeof1.C index fa84481fabf..fd6c6636ef2 100644 --- a/gcc/testsuite/g++.dg/expr/sizeof1.C +++ b/gcc/testsuite/g++.dg/expr/sizeof1.C @@ -2,6 +2,6 @@ struct A { - int foo() { return sizeof(bar); } // { dg-error "" } + int foo() { return sizeof(bar); } // { dg-error "29:ISO C\\+\\+ forbids applying .sizeof." } int bar(); }; diff --git a/gcc/testsuite/g++.dg/warn/Waddress-1.C b/gcc/testsuite/g++.dg/warn/Waddress-1.C index 8795c88bf4d..43a2a7035d5 100644 --- a/gcc/testsuite/g++.dg/warn/Waddress-1.C +++ b/gcc/testsuite/g++.dg/warn/Waddress-1.C @@ -15,36 +15,38 @@ double d; void f() { if (z) z(); } // { dg-warning "address" } -void gl() { if (z != 0) z(); } // { dg-warning "address" } -void hl() { if (z != (ptrf)0) z(); } // { dg-warning "address" } -void il() { if (z != (void*)0) z(); } // { dg-warning "address|comparison" } -void jl() { if (&n != (int*)0) z(); } // { dg-warning "address" } -void kl() { if (&m != (int*)0) z(); } // { dg-warning "address" } -void ll() { if (&s != (T*)0) z(); } // { dg-warning "address" } -void ml() { if (&t != (S*)0) z(); } // { dg-warning "address" } +void gl() { if (z != 0) z(); } // { dg-warning "19:address" } +void hl() { if (z != (ptrf)0) z(); } // { dg-warning "19:address" } +void il() { if (z != (void*)0) z(); } // { dg-warning "19:comparison" } +// { dg-warning "19:address" "" { target *-*-* } .-1 } +void jl() { if (&n != (int*)0) z(); } // { dg-warning "20:address" } +void kl() { if (&m != (int*)0) z(); } // { dg-warning "20:address" } +void ll() { if (&s != (T*)0) z(); } // { dg-warning "20:address" } +void ml() { if (&t != (S*)0) z(); } // { dg-warning "20:address" } -void nl() { if (z != (S*)0) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void pl() { if (z != (ptrfn)0) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void ql() { if (&d != (int*)0) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void rl() { if (&s != (U*)0) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } +void nl() { if (z != (S*)0) z(); } // { dg-error "19:comparison" } +// { dg-warning "19:address" "" { target *-*-* } .-1 } +void pl() { if (z != (ptrfn)0) z(); } // { dg-error "19:comparison" } +// { dg-warning "19:address" "" { target *-*-* } .-1 } +void ql() { if (&d != (int*)0) z(); } // { dg-error "20:comparison" } +// { dg-warning "20:address" "" { target *-*-* } .-1 } +void rl() { if (&s != (U*)0) z(); } // { dg-error "20:comparison" } +// { dg-warning "20:address" "" { target *-*-* } .-1 } -void gr() { if (0 != z) z(); } // { dg-warning "address" } -void hr() { if ((ptrf)0 != z) z(); } // { dg-warning "address" } -void ir() { if ((void*)0 != z) z(); } // { dg-warning "address|comparison" } -void jr() { if ((int*)0 != &n) z(); } // { dg-warning "address" } -void kr() { if ((int*)0 != &m) z(); } // { dg-warning "address" } -void lr() { if ((T*)0 != &s) z(); } // { dg-warning "address" } -void mr() { if ((S*)0 != &t) z(); } // { dg-warning "address" } +void gr() { if (0 != z) z(); } // { dg-warning "19:address" } +void hr() { if ((ptrf)0 != z) z(); } // { dg-warning "25:address" } +void ir() { if ((void*)0 != z) z(); } // { dg-warning "26:comparison" } +// { dg-warning "26:address" "" { target *-*-* } .-1 } +void jr() { if ((int*)0 != &n) z(); } // { dg-warning "25:address" } +void kr() { if ((int*)0 != &m) z(); } // { dg-warning "25:address" } +void lr() { if ((T*)0 != &s) z(); } // { dg-warning "23:address" } +void mr() { if ((S*)0 != &t) z(); } // { dg-warning "23:address" } -void nr() { if ((S*)0 != z) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void pr() { if ((ptrfn)0 != z) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void qr() { if ((int*)0 != &d) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } -void rr() { if ((U*)0 != &s) z(); } // { dg-error "comparison" } -// { dg-warning "address" "" { target *-*-* } .-1 } +void nr() { if ((S*)0 != z) z(); } // { dg-error "23:comparison" } +// { dg-warning "23:address" "" { target *-*-* } .-1 } +void pr() { if ((ptrfn)0 != z) z(); } // { dg-error "26:comparison" } +// { dg-warning "26:address" "" { target *-*-* } .-1 } +void qr() { if ((int*)0 != &d) z(); } // { dg-error "25:comparison" } +// { dg-warning "25:address" "" { target *-*-* } .-1 } +void rr() { if ((U*)0 != &s) z(); } // { dg-error "23:comparison" } +// { dg-warning "23:address" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C index b77cc0375a8..c90e8d0518a 100644 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C @@ -13,7 +13,7 @@ void (*fp)(void); void function_1 () { - fp = 1 ? function_0 : fp; // { dg-error "conditional expression|invalid conversion" } + fp = 1 ? function_0 : fp; // { dg-error "10:conditional expression|invalid conversion" } } int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C index 505f7c94968..1bd4ded9e14 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C @@ -6,5 +6,5 @@ void *vp; void example () { - vp != fp; // { dg-error "forbids comparison" } no conversion from pfn to void* + vp != fp; // { dg-error "8:ISO C\\+\\+ forbids comparison" } no conversion from pfn to void* } diff --git a/gcc/testsuite/g++.old-deja/g++.law/typeck1.C b/gcc/testsuite/g++.old-deja/g++.law/typeck1.C index 12a8ff6e8cf..6572afcce51 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/typeck1.C +++ b/gcc/testsuite/g++.old-deja/g++.law/typeck1.C @@ -13,6 +13,6 @@ int test( const foo* f, const bar* b ) { - return f == b;// { dg-error "comparison between distinct pointer types" } + return f == b;// { dg-error "26:comparison between distinct pointer types" } } diff --git a/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C b/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C index dcc607e329a..efa0e367a74 100644 --- a/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C +++ b/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C @@ -9,6 +9,6 @@ int (*p2)[5]; void test () { - p1 == p2; // { dg-error "comparison between distinct pointer types" } comparison.* - p1 > p2; // { dg-error "comparison between distinct pointer types" } comparison.* + p1 == p2; // { dg-error "6:comparison between distinct pointer types" } comparison.* + p1 > p2; // { dg-error "6:comparison between distinct pointer types" } comparison.* } diff --git a/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C b/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C index 1e742cb0d04..54fe6966760 100644 --- a/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C +++ b/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C @@ -12,5 +12,5 @@ int i; void test () { - i ? f : fp; // { dg-error "conditional expression|invalid conversion" } + i ? f : fp; // { dg-error "6:conditional expression|invalid conversion" } } -- 2.30.2