re PR c++/55652 (ICE (segfault) with templates and structs)

PR c++/55652
	* typeck2.c (merge_exception_specifiers): Don't call operand_equal_p
	if noex is NULL.

	* g++.dg/cpp0x/noexcept19.C: New test.

From-SVN: r194479
This commit is contained in:
Jakub Jelinek 2012-12-13 15:35:12 +01:00 committed by Jakub Jelinek
parent 5944e3a8cc
commit 8e9f20cf1a
4 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-12-13 Jakub Jelinek <jakub@redhat.com>
PR c++/55652
* typeck2.c (merge_exception_specifiers): Don't call operand_equal_p
if noex is NULL.
2012-12-11 Jason Merrill <jason@redhat.com>
PR c++/54883

View File

@ -1871,7 +1871,7 @@ merge_exception_specifiers (tree list, tree add, tree fn)
/* If ADD is a deferred noexcept, we must have been called from
process_subob_fn. For implicitly declared functions, we build up
a list of functions to consider at instantiation time. */
if (operand_equal_p (noex, boolean_true_node, 0))
if (noex && operand_equal_p (noex, boolean_true_node, 0))
noex = NULL_TREE;
gcc_assert (fn && (!noex || is_overloaded_fn (noex)));
noex = build_overload (fn, noex);

View File

@ -1,3 +1,8 @@
2012-12-13 Jakub Jelinek <jakub@redhat.com>
PR c++/55652
* g++.dg/cpp0x/noexcept19.C: New test.
2012-12-13 Richard Biener <rguenther@suse.de>
PR lto/55660

View File

@ -0,0 +1,29 @@
// PR c++/55652
// { dg-do compile }
// { dg-options "-std=c++11" }
template <typename T>
struct A
{
static const bool a = false;
};
template <typename X, typename Y = A <X>>
struct B
{
B () noexcept (A <Y>::a) {}
};
template <typename X, typename Y>
struct C
{
X x;
Y y;
};
struct D
{
D () throw (int);
};
C <D, B <D>> c;