mirror of git://gcc.gnu.org/git/gcc.git
PR c++/55922 - list-value-initialization of base
PR c++/63151
* init.c (expand_aggr_init_1): Handle list-initialization from {}.
From-SVN: r238688
This commit is contained in:
parent
2dac37c091
commit
f388b7be18
|
|
@ -1,5 +1,9 @@
|
|||
2016-07-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/55922
|
||||
PR c++/63151
|
||||
* init.c (expand_aggr_init_1): Handle list-initialization from {}.
|
||||
|
||||
PR c++/70709
|
||||
* class.c (walk_subobject_offsets): Handle 0-length array.
|
||||
|
||||
|
|
|
|||
|
|
@ -1817,6 +1817,19 @@ expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
|
|||
return;
|
||||
}
|
||||
|
||||
/* List-initialization from {} becomes value-initialization for non-aggregate
|
||||
classes with default constructors. Handle this here so protected access
|
||||
works. */
|
||||
if (init && TREE_CODE (init) == TREE_LIST)
|
||||
{
|
||||
tree elt = TREE_VALUE (init);
|
||||
if (DIRECT_LIST_INIT_P (elt)
|
||||
&& CONSTRUCTOR_ELTS (elt) == 0
|
||||
&& CLASSTYPE_NON_AGGREGATE (type)
|
||||
&& TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
|
||||
init = void_type_node;
|
||||
}
|
||||
|
||||
/* If an explicit -- but empty -- initializer list was present,
|
||||
that's value-initialization. */
|
||||
if (init == void_type_node)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
// PR c++/55922
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
bool called = false;
|
||||
|
||||
struct Base {
|
||||
Base() { if (called) throw 1; called = true; }
|
||||
};
|
||||
|
||||
struct B1 : virtual Base {
|
||||
B1() { }
|
||||
};
|
||||
|
||||
struct C : B1, virtual Base {
|
||||
C() : B1{}
|
||||
{ }
|
||||
};
|
||||
|
||||
int main() {
|
||||
C c;
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
// PR c++/71774
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
class Meow
|
||||
{
|
||||
protected:
|
||||
Meow() =default;
|
||||
virtual void f() {}
|
||||
};
|
||||
|
||||
class Purr : public Meow
|
||||
{
|
||||
public:
|
||||
Purr()
|
||||
: Meow{}
|
||||
{}
|
||||
};
|
||||
Loading…
Reference in New Issue