re PR c++/59123 ([c++11] can't forward-declare an object later defined constexpr)
authorPaolo Carlini <paolo.carlini@oracle.com>
Sun, 17 Nov 2013 19:22:43 +0000 (19:22 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 17 Nov 2013 19:22:43 +0000 (19:22 +0000)
/cp
2013-11-17  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59123
* decl.c (validate_constexpr_redeclaration): Redeclarations of
variables can differ in constexpr.

/testsuite
2013-11-17  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59123
* g++.dg/cpp0x/constexpr-redeclaration1.C: New.
* g++.dg/cpp0x/constexpr-decl.C: Adjust.

From-SVN: r204923

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C [new file with mode: 0644]

index 5f52d90..2729ec3 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/59123
+       * decl.c (validate_constexpr_redeclaration): Redeclarations of
+       variables can differ in constexpr.
+
 2013-11-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/29143
index 7d9d5df..34d73be 100644 (file)
@@ -1216,10 +1216,12 @@ validate_constexpr_redeclaration (tree old_decl, tree new_decl)
       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
          && DECL_TEMPLATE_SPECIALIZATION (new_decl))
        return true;
+
+      error ("redeclaration %qD differs in %<constexpr%>", new_decl);
+      error ("from previous declaration %q+D", old_decl);
+      return false;
     }
-  error ("redeclaration %qD differs in %<constexpr%>", new_decl);
-  error ("from previous declaration %q+D", old_decl);
-  return false;
+  return true;
 }
 
 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                  \
index 3f7e1be..c58adf9 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/59123
+       * g++.dg/cpp0x/constexpr-redeclaration1.C: New.
+       * g++.dg/cpp0x/constexpr-decl.C: Adjust.
+
 2013-11-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/29143
index 1af0662..f16f12c 100644 (file)
@@ -3,8 +3,7 @@
 
 struct S {
   static constexpr int size;   // { dg-error "must have an initializer" "must have" }
-  // { dg-error "previous declaration" "previous" { target *-*-* } 5 }
 };
 
 const int limit = 2 * S::size;
-constexpr int S::size = 256;   // { dg-error "" }
+constexpr int S::size = 256;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C
new file mode 100644 (file)
index 0000000..6010b20
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/59123
+// { dg-do compile { target c++11 } }
+
+// Fwd-declarations
+struct S;
+extern const S s;
+
+// (... later) definitions
+struct S {};
+constexpr S s {};