Harmonize diagnostics for invalid reference binding
authorJonathan Wakely <jwakely@redhat.com>
Sat, 6 Aug 2016 00:07:05 +0000 (01:07 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Sat, 6 Aug 2016 00:07:05 +0000 (01:07 +0100)
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

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/conversion/pr16333.C
gcc/testsuite/g++.dg/conversion/pr41426.C
gcc/testsuite/g++.dg/conversion/pr66211.C
gcc/testsuite/g++.dg/cpp1y/lambda-init9.C
gcc/testsuite/g++.dg/init/ref8.C
gcc/testsuite/g++.old-deja/g++.law/cvt20.C
gcc/testsuite/g++.old-deja/g++.mike/p9732c.C

index b2307e928f33d948eddd1079a26f31ef624ae767..4efbc7b153ffebf55328bcbff300baa3216984f2 100644 (file)
@@ -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
index 802c3258e8f35fa6ae35d2fc4c1f8d7b6f419e03..918661ab786769698e4130ffff5a3af62920ce39 100644 (file)
@@ -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);
index e9792962c62d80bcac629077173210c7d0815d77..06d6bae6b5a8620bf90c7f836cc79f466fa2f65a 100644 (file)
@@ -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
index 810c12a9acb451953ec4548c4f4b7ecf0d186635..a00bc5c167c4ed6250e4160b2614e742a271b8ee 100644 (file)
@@ -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" }
index 78ec5fbdfbf54a25af6c2a98e61922a364137d31..5493a91ecfad23915fa3ad5ba6c4066e6cdfcd69 100644 (file)
@@ -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
index 49d2478888aa6029cb8ccd7b4a8b2cd964819135..770e8a0e20f26445ee4b34d69263aac7e022d4fa 100644 (file)
@@ -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" }
 }
index a86f03e0f1d592f049b6b36de81775fd2aea67ac..795d036ca7566a58a70270348489b7035eef8654 100644 (file)
@@ -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" }
 }
index 406cc10401d4ca5487645b97ec9eca7dc7ad87f9..5b68a2f003315de0e06b73a8934273be28173db0 100644 (file)
@@ -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" }
 }
index f5c703bccfd4fef190b9a964fb4f4c6d606b4716..97b465fe06f4fd38c775846fc7ceb2372fb5f03b 100644 (file)
@@ -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" }
 }
index 9239a0978ec992daec42668c9a2c2d67bede6c86..247d372de7dcfb7a05df45ef1b7092a6ddd9efc1 100644 (file)
@@ -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" }