re PR c++/52796 ([C++11] Initialization of primitive object with 0-length parameter pack fails to value-initialize)
PR c++/52796 * pt.c (tsubst_initializer_list): A pack expansion with no elements means value-initialization. From-SVN: r186121
This commit is contained in:
parent
d790186831
commit
d828fc3819
|
@ -1,3 +1,9 @@
|
|||
2012-04-03 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/52796
|
||||
* pt.c (tsubst_initializer_list): A pack expansion with no elements
|
||||
means value-initialization.
|
||||
|
||||
2012-03-29 Meador Inge <meadori@codesourcery.com>
|
||||
|
||||
PR c++/52672
|
||||
|
|
|
@ -18983,6 +18983,7 @@ tsubst_initializer_list (tree t, tree argvec)
|
|||
}
|
||||
else
|
||||
{
|
||||
tree tmp;
|
||||
decl = tsubst_copy (TREE_PURPOSE (t), argvec,
|
||||
tf_warning_or_error, NULL_TREE);
|
||||
|
||||
|
@ -18991,10 +18992,17 @@ tsubst_initializer_list (tree t, tree argvec)
|
|||
in_base_initializer = 1;
|
||||
|
||||
init = TREE_VALUE (t);
|
||||
tmp = init;
|
||||
if (init != void_type_node)
|
||||
init = tsubst_expr (init, argvec,
|
||||
tf_warning_or_error, NULL_TREE,
|
||||
/*integral_constant_expression_p=*/false);
|
||||
if (init == NULL_TREE && tmp != NULL_TREE)
|
||||
/* If we had an initializer but it instantiated to nothing,
|
||||
value-initialize the object. This will only occur when
|
||||
the initializer was a pack expansion where the parameter
|
||||
packs used in that expansion were of length zero. */
|
||||
init = void_type_node;
|
||||
in_base_initializer = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-04-03 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/52796
|
||||
* g++.dg/cpp0x/variadic-value1.C: New.
|
||||
|
||||
2012-04-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// PR c++/52796
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
inline void *operator new(__SIZE_TYPE__ s, void *p) { return p; }
|
||||
|
||||
struct A
|
||||
{
|
||||
int i;
|
||||
template<class... Ts>
|
||||
A(Ts&&... ts): i(ts...) { }
|
||||
};
|
||||
|
||||
static union {
|
||||
unsigned char c[sizeof(A)];
|
||||
int i;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
i = 0xdeadbeef;
|
||||
new(c) A;
|
||||
if (i != 0)
|
||||
__builtin_abort();
|
||||
}
|
Loading…
Reference in New Issue