diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-12-21 16:28:08 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-12-21 16:28:08 +0000 |
commit | 65a6f60960b629edd33700f2346d219a0331882f (patch) | |
tree | ab6d2fda508e6c45c1c0afad908931e4436906b4 | |
parent | b0f96e350a1aade0576625e4903c5fc1fa2b398d (diff) | |
download | gcc-65a6f60960b629edd33700f2346d219a0331882f.zip gcc-65a6f60960b629edd33700f2346d219a0331882f.tar.gz gcc-65a6f60960b629edd33700f2346d219a0331882f.tar.bz2 |
re PR c++/51305 ([C++11][constexpr] noexcept-specifier overconstraints constexpr functions)
/cp
2011-12-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51305
* semantics.c (massage_constexpr_body): Reorder conditionals, make
sure a BIND_EXPR embedded in a MUST_NOT_THROW_EXPR is handled.
/testsuite
2011-12-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51305
* g++.dg/cpp0x/constexpr-noexcept6.C: New.
From-SVN: r182594
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C | 10 |
4 files changed, 23 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9ccb801..98a1b79 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51305 + * semantics.c (massage_constexpr_body): Reorder conditionals, make + sure a BIND_EXPR embedded in a MUST_NOT_THROW_EXPR is handled. + 2011-12-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51621 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0cb7ae8..bad418f 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5998,12 +5998,12 @@ massage_constexpr_body (tree fun, tree body) (DECL_CONTEXT (fun), body); else { - if (TREE_CODE (body) == BIND_EXPR) - body = BIND_EXPR_BODY (body); if (TREE_CODE (body) == EH_SPEC_BLOCK) body = EH_SPEC_STMTS (body); if (TREE_CODE (body) == MUST_NOT_THROW_EXPR) body = TREE_OPERAND (body, 0); + if (TREE_CODE (body) == BIND_EXPR) + body = BIND_EXPR_BODY (body); body = constexpr_fn_retval (body); } return body; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b0e247c..8e43e3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51305 + * g++.dg/cpp0x/constexpr-noexcept6.C: New. + 2011-12-21 Jakub Jelinek <jakub@redhat.com> PR middle-end/51644 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C new file mode 100644 index 0000000..91e93fd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C @@ -0,0 +1,10 @@ +// PR c++/51305 +// { dg-options -std=c++0x } + +constexpr bool ok() noexcept +{ + typedef int type; + return true; +} + +constexpr auto x = ok(); |