From ffabb76185e08d4db5d09c615fdeb99b06a234b6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 3 Jan 2013 15:36:14 -0500 Subject: [PATCH] re PR c++/55842 (C++11 ICE with boost multi-precision and boost variant) PR c++/55842 * semantics.c (trait_expr_value): Call maybe_instantiate_noexcept. From-SVN: r194869 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/semantics.c | 3 ++- gcc/testsuite/g++.dg/ext/has_nothrow_constructor-2.C | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/has_nothrow_constructor-2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dda06fd..56fcfa6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2013-01-03 Jason Merrill + PR c++/55842 + * semantics.c (trait_expr_value): Call maybe_instantiate_noexcept. + PR c++/55856 * semantics.c (build_data_member_initialization): Handle DECL_EXPR. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 9f8119f..2e02295 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5454,7 +5454,8 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) || (CLASS_TYPE_P (type1) && (t = locate_ctor (type1)) - && TYPE_NOTHROW_P (TREE_TYPE (t)))); + && (maybe_instantiate_noexcept (t), + TYPE_NOTHROW_P (TREE_TYPE (t))))); case CPTK_HAS_TRIVIAL_CONSTRUCTOR: type1 = strip_array_types (type1); diff --git a/gcc/testsuite/g++.dg/ext/has_nothrow_constructor-2.C b/gcc/testsuite/g++.dg/ext/has_nothrow_constructor-2.C new file mode 100644 index 0000000..9191c3e --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/has_nothrow_constructor-2.C @@ -0,0 +1,7 @@ +// PR c++/55842 +// { dg-options -std=c++11 } + +template struct number { + number() noexcept(noexcept(0)) { } +}; +const int z=__has_nothrow_constructor(number<>); -- 2.7.4