Hi,

Volker noticed that a tweak I committed back in September, which tidied the diagnostic we produce in C++11 mode for the testcase in c++/68754 causes this error recovery regression. We could try restoring the consistency, for example along the lines of the patchlet I posted on the audit trail (passes testing) but, for 8.1.0 at least, I propose to simply revert that change. Tested x86_64-linux.

Thanks, Paolo.

//////////////////////

/cp
2018-03-27  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/85067
        * method.c (defaulted_late_check): Partially revert r253321 changes,
        do not early return upon error.

/testsuite
2018-03-27  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/85067
        * g++.dg/cpp0x/defaulted51.C: New.
        * g++.dg/cpp0x/constexpr-68754.C: Adjust.
Index: cp/method.c
===================================================================
--- cp/method.c (revision 258870)
+++ cp/method.c (working copy)
@@ -2189,7 +2189,6 @@ defaulted_late_check (tree fn)
             "expected signature", fn);
       inform (DECL_SOURCE_LOCATION (fn),
              "expected signature: %qD", implicit_fn);
-      return;
     }
 
   if (DECL_DELETED_FN (implicit_fn))
Index: testsuite/g++.dg/cpp0x/constexpr-68754.C
===================================================================
--- testsuite/g++.dg/cpp0x/constexpr-68754.C    (revision 258870)
+++ testsuite/g++.dg/cpp0x/constexpr-68754.C    (working copy)
@@ -3,5 +3,5 @@
 
 struct base { };
 struct derived : base {
-  constexpr derived& operator=(derived const&) = default; // { dg-error 
"defaulted declaration" "" { target { ! c++14 } } }
+  constexpr derived& operator=(derived const&) = default; // { dg-error 
"defaulted" "" { target { ! c++14 } } }
 };
Index: testsuite/g++.dg/cpp0x/defaulted51.C
===================================================================
--- testsuite/g++.dg/cpp0x/defaulted51.C        (nonexistent)
+++ testsuite/g++.dg/cpp0x/defaulted51.C        (working copy)
@@ -0,0 +1,15 @@
+// PR c++/85067
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+  A();
+  A(volatile A&) = default;  // { dg-error "defaulted" }
+};
+
+struct B
+{
+  A<0> a;
+};
+
+B b;

Reply via email to