re PR c++/54086 (GCC should allow constexpr and const together)
authorJason Merrill <jason@redhat.com>
Wed, 25 Jul 2012 14:57:06 +0000 (10:57 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 25 Jul 2012 14:57:06 +0000 (10:57 -0400)
PR c++/54086
* decl.c (grokdeclarator): Allow const and constexpr together.

From-SVN: r189852

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

index f5fbb5c..409e64d 100644 (file)
@@ -1,5 +1,8 @@
 2012-07-25  Jason Merrill  <jason@redhat.com>
 
+       PR c++/54086
+       * decl.c (grokdeclarator): Allow const and constexpr together.
+
        PR c++/54020
        * semantics.c (potential_constant_expression_1) [COND_EXPR]: Call
        maybe_constant_value.
index c37787b..047b2fe 100644 (file)
@@ -9528,8 +9528,6 @@ grokdeclarator (const cp_declarator *declarator,
      the object as `const'.  */
   if (constexpr_p && innermost_code != cdk_function)
     {
-      if (type_quals & TYPE_QUAL_CONST)
-        error ("both %<const%> and %<constexpr%> cannot be used here");
       if (type_quals & TYPE_QUAL_VOLATILE)
         error ("both %<volatile%> and %<constexpr%> cannot be used here");
       if (TREE_CODE (type) != REFERENCE_TYPE)
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C
new file mode 100644 (file)
index 0000000..6ee7225
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/54086
+// { dg-do compile { target c++11 } }
+
+static constexpr const char Data[] = {
+  'D', 'A', 'T', 'A',
+};
+static constexpr const char *data_func() { return Data; }
index 4ff398b..6c9d466 100644 (file)
@@ -18,8 +18,7 @@ extern constexpr int i2; // { dg-error "definition" }
 // error: missing initializer
 constexpr A1 a2; // { dg-error "uninitialized const" }
 
-// error: duplicate cv
-const constexpr A1 a3 = A1(); // { dg-error "both .const. and .constexpr. cannot" }
+const constexpr A1 a3 = A1();
 
 volatile constexpr A1 a4 = A1(); // { dg-error "both .volatile. and .constexpr. cannot" }