diff options
author | Marek Polacek <polacek@redhat.com> | 2016-08-04 07:47:50 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2016-08-04 07:47:50 +0000 |
commit | a00084346a299e8154ede732c6d4d3ae56d1f66f (patch) | |
tree | d15afcd494f4ffb17686aa081db652476c463186 /gcc | |
parent | fb46286e8d34e8bffdc9d04ec4cf4b10698a7e20 (diff) | |
download | gcc-a00084346a299e8154ede732c6d4d3ae56d1f66f.zip gcc-a00084346a299e8154ede732c6d4d3ae56d1f66f.tar.gz gcc-a00084346a299e8154ede732c6d4d3ae56d1f66f.tar.bz2 |
re PR c++/70229 (error: constexpr constructor does not have empty body)
PR c++/70229
* constexpr.c (check_constexpr_ctor_body_1): Allow typedef
declarations.
* g++.dg/cpp0x/constexpr-ctor19.C: New test.
From-SVN: r239115
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-ctor19.C | 42 |
4 files changed, 55 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 38ae443..2a99370 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-08-04 Marek Polacek <polacek@redhat.com> + + PR c++/70229 + * constexpr.c (check_constexpr_ctor_body_1): Allow typedef + declarations. + 2016-08-01 Jason Merrill <jason@redhat.com> * mangle.c (mangle_decl): Warn about mangled name change even if diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index edade48..41665c5 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -425,7 +425,8 @@ check_constexpr_ctor_body_1 (tree last, tree list) switch (TREE_CODE (list)) { case DECL_EXPR: - if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL) + if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL + || TREE_CODE (DECL_EXPR_DECL (list)) == TYPE_DECL) return true; return false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index df48f68..b5d8ee5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-08-04 Marek Polacek <polacek@redhat.com> + + PR c++/70229 + * g++.dg/cpp0x/constexpr-ctor19.C: New test. + 2016-08-04 Richard Biener <rguenther@suse.de> PR middle-end/71984 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor19.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor19.C new file mode 100644 index 0000000..f5ef053 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor19.C @@ -0,0 +1,42 @@ +// PR c++/70229 +// { dg-do compile { target c++11 } } + +template <class> +class S { + constexpr S (void) { + typedef int T; + } +}; + +template <class> +class S2 { + constexpr S2 (void) { + ; + } +}; + +template <class> +class S3 { + constexpr S3 (void) { + typedef enum { X } E; + } // { dg-error "does not have empty body" "" { target c++11_only } } +}; + +template <class> +class S4 { + constexpr S4 (void) { + typedef struct { int j; } U; + } // { dg-error "does not have empty body" "" { target c++11_only } } +}; + +struct V +{ + int i; +}; + +template <class> +class S5 { + constexpr S5 (void) { + typedef V W; + } +}; |