diff options
| author | Jakub Jelinek <jakub@redhat.com> | 2012-12-06 19:55:48 +0100 |
|---|---|---|
| committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-12-06 19:55:48 +0100 |
| commit | 84fd832c033bea574a835ca680e7b84d2027798d (patch) | |
| tree | 198119626a140a928ea4247c14efb8b91ce927a4 /gcc/cp/except.c | |
| parent | 947f720f7d7ca03f642e8682a97cb667bd343569 (diff) | |
| download | gcc-84fd832c033bea574a835ca680e7b84d2027798d.zip gcc-84fd832c033bea574a835ca680e7b84d2027798d.tar.gz gcc-84fd832c033bea574a835ca680e7b84d2027798d.tar.bz2 | |
re PR c++/54207 ([C++0x] ICE in build_noexcept_spec when bool is #defined/typedef'd)
PR c++/54207
* except.c (build_noexcept_spec): Avoid direct comparison
with boolean_true_node or boolean_false_node, instead use
operand_equal_p and/or INTEGER_CST check.
* pt.c (tsubst_exception_specification): Likewise.
* typeck2.c (merge_exception_specifiers): Likewise.
* g++.dg/cpp0x/noexcept18.C: New test.
From-SVN: r194263
Diffstat (limited to 'gcc/cp/except.c')
| -rw-r--r-- | gcc/cp/except.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/cp/except.c b/gcc/cp/except.c index cbb0235..3689566 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -1316,15 +1316,21 @@ build_noexcept_spec (tree expr, int complain) LOOKUP_NORMAL); expr = cxx_constant_value (expr); } - if (expr == boolean_true_node) - return noexcept_true_spec; - else if (expr == boolean_false_node) - return noexcept_false_spec; + if (TREE_CODE (expr) == INTEGER_CST) + { + if (operand_equal_p (expr, boolean_true_node, 0)) + return noexcept_true_spec; + else + { + gcc_checking_assert (operand_equal_p (expr, boolean_false_node, 0)); + return noexcept_false_spec; + } + } else if (expr == error_mark_node) return error_mark_node; else { - gcc_assert (processing_template_decl || expr == error_mark_node + gcc_assert (processing_template_decl || TREE_CODE (expr) == DEFERRED_NOEXCEPT); return build_tree_list (expr, NULL_TREE); } |
