diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-08-06 01:07:05 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-08-06 01:07:05 +0100 |
commit | fa76f2c63032aaa2214c015d7d5f33257bd3ed66 (patch) | |
tree | ea519a736c6f4389516d7420be5eb3f11c936b41 | |
parent | 3e9f67e6a2c13e7e78d1e34dadfdc8d96176e9fe (diff) | |
download | gcc-fa76f2c63032aaa2214c015d7d5f33257bd3ed66.zip gcc-fa76f2c63032aaa2214c015d7d5f33257bd3ed66.tar.gz gcc-fa76f2c63032aaa2214c015d7d5f33257bd3ed66.tar.bz2 |
Harmonize diagnostics for invalid reference binding
gcc/cp:
* call.c (convert_like_real): Harmonize diagnostics for invalid
reference binding.
gcc/testsuite:
* call.c (convert_like_real): Harmonize diagnostics for invalid
reference binding.
* g++.dg/conversion/pr16333.C: Adjust dg-error regexp.
* g++.dg/conversion/pr41426.C: Likewise.
* g++.dg/conversion/pr66211.C: Likewise.
* g++.dg/cpp1y/lambda-init9.C: Likewise.
* g++.dg/init/ref8.C: Likewise.
* g++.old-deja/g++.law/cvt20.C: Likewise.
* g++.old-deja/g++.mike/p9732c.C: Likewise.
From-SVN: r239184
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/call.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conversion/pr16333.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conversion/pr41426.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conversion/pr66211.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-init9.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref8.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.law/cvt20.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/p9732c.C | 2 |
10 files changed, 28 insertions, 13 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b2307e9..4efbc7b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2016-08-06 Jonathan Wakely <jwakely@redhat.com> + + * call.c (convert_like_real): Harmonize diagnostics for invalid + reference binding. + 2016-08-05 Martin Sebor <msebor@redhat.com> * constexpr.c (cxx_eval_store_expression): Remove hyphen from diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 802c325..918661a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6710,15 +6710,15 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, tree extype = TREE_TYPE (expr); if (TYPE_REF_IS_RVALUE (ref_type) && lvalue_p (expr)) - error_at (loc, "cannot bind %qT lvalue to %qT", - extype, totype); + error_at (loc, "cannot bind rvalue reference of type %qT to " + "lvalue of type %qT", totype, extype); else if (!TYPE_REF_IS_RVALUE (ref_type) && !lvalue_p (expr) && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))) - error_at (loc, "invalid initialization of non-const reference of " - "type %qT from an rvalue of type %qT", totype, extype); + error_at (loc, "cannot bind non-const lvalue reference of " + "type %qT to an rvalue of type %qT", totype, extype); else if (!reference_compatible_p (TREE_TYPE (totype), extype)) - error_at (loc, "binding %qT to reference of type %qT " - "discards qualifiers", extype, totype); + error_at (loc, "binding reference of type %qT to %qT " + "discards qualifiers", totype, extype); else gcc_unreachable (); maybe_print_user_conv_context (convs); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e979296..06d6bae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2016-08-06 Jonathan Wakely <jwakely@redhat.com> + + * g++.dg/conversion/pr16333.C: Adjust dg-error regexp. + * g++.dg/conversion/pr41426.C: Likewise. + * g++.dg/conversion/pr66211.C: Likewise. + * g++.dg/cpp1y/lambda-init9.C: Likewise. + * g++.dg/init/ref8.C: Likewise. + * g++.old-deja/g++.law/cvt20.C: Likewise. + * g++.old-deja/g++.mike/p9732c.C: Likewise. + 2016-08-05 Patrick Palka <ppalka@gcc.gnu.org> PR tree-optimization/18046 diff --git a/gcc/testsuite/g++.dg/conversion/pr16333.C b/gcc/testsuite/g++.dg/conversion/pr16333.C index 810c12a..a00bc5c 100644 --- a/gcc/testsuite/g++.dg/conversion/pr16333.C +++ b/gcc/testsuite/g++.dg/conversion/pr16333.C @@ -7,4 +7,4 @@ struct X { int a[3]; X foo1 () { return a; } const X &foo2 () { return a; } // { dg-warning "returning reference to temporary" } -X &foo3 () { return a; } // { dg-error "invalid initialization" } +X &foo3 () { return a; } // { dg-error "cannot bind non-const lvalue ref" } diff --git a/gcc/testsuite/g++.dg/conversion/pr41426.C b/gcc/testsuite/g++.dg/conversion/pr41426.C index 78ec5fb..5493a91 100644 --- a/gcc/testsuite/g++.dg/conversion/pr41426.C +++ b/gcc/testsuite/g++.dg/conversion/pr41426.C @@ -23,7 +23,7 @@ const A<float> &g3() A<float> &g4() { float f[] = {1.1f, 2.3f}; - return f; // { dg-error "invalid initialization" } + return f; // { dg-error "cannot bind non-const lvalue ref" } } struct B diff --git a/gcc/testsuite/g++.dg/conversion/pr66211.C b/gcc/testsuite/g++.dg/conversion/pr66211.C index 49d2478..770e8a0 100644 --- a/gcc/testsuite/g++.dg/conversion/pr66211.C +++ b/gcc/testsuite/g++.dg/conversion/pr66211.C @@ -7,5 +7,5 @@ int main() { int x = 0; double y = 1; - f(1 > 0 ? x : y); // { dg-error "from an rvalue" } + f(1 > 0 ? x : y); // { dg-error "cannot bind .* to an rvalue" } } diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-init9.C b/gcc/testsuite/g++.dg/cpp1y/lambda-init9.C index a86f03e..795d036 100644 --- a/gcc/testsuite/g++.dg/cpp1y/lambda-init9.C +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-init9.C @@ -2,5 +2,5 @@ void f() { - [&x=1]{}; // { dg-error "cannot capture|invalid initialization" } + [&x=1]{}; // { dg-error "cannot capture|cannot bind non-const lvalue ref" } } diff --git a/gcc/testsuite/g++.dg/init/ref8.C b/gcc/testsuite/g++.dg/init/ref8.C index 406cc10..5b68a2f 100644 --- a/gcc/testsuite/g++.dg/init/ref8.C +++ b/gcc/testsuite/g++.dg/init/ref8.C @@ -6,5 +6,5 @@ A operator*(A, A); A& operator+=(A& a, const A& b) { - return a = a * b; // { dg-error "non-const reference" } + return a = a * b; // { dg-error "non-const lvalue reference" } } diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt20.C b/gcc/testsuite/g++.old-deja/g++.law/cvt20.C index f5c703b..97b465f 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/cvt20.C +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt20.C @@ -16,5 +16,5 @@ void f(const char *& x) // { dg-message "argument" } int main() { - f ("foo"); // { dg-error "invalid initialization" } + f ("foo"); // { dg-error "cannot bind non-const lvalue reference" } } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C b/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C index 9239a09..247d372 100644 --- a/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C @@ -2,4 +2,4 @@ // prms-id: 9732 struct foo {}; -foo& x() { return foo(); } // { dg-error "invalid init" } +foo& x() { return foo(); } // { dg-error "cannot bind non-const lvalue" } |