Commit 54fbd24d by Jason Merrill Committed by Jason Merrill

PR c++/70468 - ICE with constructor delegation via typedef.

	* pt.c (tsubst_initializer_list): Check for other mem-initializers
	with constructor delegation.

From-SVN: r257931
parent c287dea0
2018-02-22 Jason Merrill <jason@redhat.com>
PR c++/70468 - ICE with constructor delegation via typedef.
* pt.c (tsubst_initializer_list): Check for other mem-initializers
with constructor delegation.
2018-02-22 Jason Merrill <jason@redhat.com>
PR c++/84424 - ICE with constexpr and __builtin_shuffle.
* constexpr.c (reduced_constant_expression_p): Handle CONSTRUCTOR of
VECTOR_TYPE.
......
......@@ -23558,6 +23558,7 @@ static tree
tsubst_initializer_list (tree t, tree argvec)
{
tree inits = NULL_TREE;
tree target_ctor = error_mark_node;
for (; t; t = TREE_CHAIN (t))
{
......@@ -23674,6 +23675,28 @@ tsubst_initializer_list (tree t, tree argvec)
in_base_initializer = 0;
}
if (target_ctor != error_mark_node
&& init != error_mark_node)
{
error ("mem-initializer for %qD follows constructor delegation",
decl);
return inits;
}
/* Look for a target constructor. */
if (init != error_mark_node
&& decl && CLASS_TYPE_P (decl)
&& same_type_p (decl, current_class_type))
{
maybe_warn_cpp0x (CPP0X_DELEGATING_CTORS);
if (inits)
{
error ("constructor delegation follows mem-initializer for %qD",
TREE_PURPOSE (inits));
continue;
}
target_ctor = init;
}
if (decl)
{
init = build_tree_list (decl, init);
......
// PR c++/70468
// { dg-do compile { target c++11 } }
// { dg-additional-options -w }
struct S {};
template < typename = S >
class A
{
public:
A () : f0 (), f1 () {} // { dg-error "" }
private:
typedef A<> f0;
int f1;
};
template < typename = S, typename = S >
class B
{
};
template < typename T1, typename T2 >
B < T1, T2 > &operator<< (B < T1, T2 >&, const int)
{
A<> ();
}
template
B < S, S > &operator<< (B < S, S >&, const int);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment