]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/cp/cxx-pretty-print.c
Implement noexcept-specification (15.4)
authorJason Merrill <jason@redhat.com>
Fri, 4 Jun 2010 21:21:23 +0000 (17:21 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 4 Jun 2010 21:21:23 +0000 (17:21 -0400)
commit3a55fb4c89d4489cd21a8efde78a6f0de2e72099
tree45574d319c9bf599a6b62ec4994fe09f77d4a51b
parent0a766368bd6e51459bfd334086cc04af48f91f08
Implement noexcept-specification (15.4)

Implement noexcept-specification (15.4)
* parser.c (cp_parser_exception_specification_opt): Parse it.
Give -Wdeprecated warning about throw() specs.
* pt.c (tsubst_exception_specification): Handle it.
* error.c (dump_exception_spec): Handle it.
* cxx-pretty-print.c (pp_cxx_exception_specification): Likewise.
* typeck.c (comp_except_specs): Handle compatibility rules.
Change exact parm to take an enum.
* typeck2.c (merge_exception_specifiers): Handle noexcept.
* except.c (nothrow_spec_p, type_noexcept_p): New fns.
(type_throw_all_p, build_noexcept_spec): New fns.
* cp-tree.h (TYPE_NOTHROW_P, TYPE_NOEXCEPT_P): Use them.
(comp_except_specs): Define ce_derived, ce_normal, ce_exact enums.
(cp_tree_index): Add CPTI_NOEXCEPT_TRUE_SPEC, CPTI_NOEXCEPT_FALSE_SPEC.
(noexcept_true_spec, noexcept_false_spec): New macros.
* name-lookup.c (pushdecl_maybe_friend): Adjust.
* search.c (check_final_overrider): Adjust.
* decl.c (check_redeclaration_exception_specification): Adjust.
(use_eh_spec_block): Use type_throw_all_p.
(cxx_init_decl_processing): Set noexcept_false_spec,noexcept_true_spec.
Give operator new a noexcept-specification in C++0x mode.
* tree.c (build_exception_variant, cxx_type_hash_eq): Adjust.
(cp_build_type_attribute_variant): Don't test TYPE_RAISES_EXCEPTIONS.

From-SVN: r160298
19 files changed:
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/cxx-pretty-print.c
gcc/cp/decl.c
gcc/cp/error.c
gcc/cp/except.c
gcc/cp/name-lookup.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/search.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/noexcept02.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/noexcept03.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/noexcept04.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/noexcept05.C [new file with mode: 0644]
gcc/testsuite/g++.dg/eh/spec8.C