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:
parent
5944e3a8cc
commit
8e9f20cf1a
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue