diff options
author | Jason Merrill <jason@redhat.com> | 2012-07-25 10:57:06 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-07-25 10:57:06 -0400 |
commit | 452ed9e73bfdc6b08003cd0f79c8df8bd7af5b1d (patch) | |
tree | 91d7df58abad71242d425eb5c528ecae150c113f | |
parent | 9155a6ddc40af0eed7079eac318e6dd864dcdbc9 (diff) | |
download | gcc-452ed9e73bfdc6b08003cd0f79c8df8bd7af5b1d.zip gcc-452ed9e73bfdc6b08003cd0f79c8df8bd7af5b1d.tar.gz gcc-452ed9e73bfdc6b08003cd0f79c8df8bd7af5b1d.tar.bz2 |
re PR c++/54086 (GCC should allow constexpr and const together)
PR c++/54086
* decl.c (grokdeclarator): Allow const and constexpr together.
From-SVN: r189852
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C | 3 |
4 files changed, 11 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f5fbb5c..409e64d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index c37787b..047b2fe 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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 index 0000000..6ee7225 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C @@ -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; } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C index 4ff398b..6c9d466 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C @@ -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" } |