aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2016-08-06 01:07:05 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2016-08-06 01:07:05 +0100
commitfa76f2c63032aaa2214c015d7d5f33257bd3ed66 (patch)
treeea519a736c6f4389516d7420be5eb3f11c936b41
parent3e9f67e6a2c13e7e78d1e34dadfdc8d96176e9fe (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/call.c12
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/g++.dg/conversion/pr16333.C2
-rw-r--r--gcc/testsuite/g++.dg/conversion/pr41426.C2
-rw-r--r--gcc/testsuite/g++.dg/conversion/pr66211.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-init9.C2
-rw-r--r--gcc/testsuite/g++.dg/init/ref8.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/cvt20.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p9732c.C2
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" }