Commit 639475f0 by Jason Merrill Committed by Jason Merrill

re PR c++/67364 ("accessing uninitialized member" error in constexpr context)

	PR c++/67364

	* constexpr.c (cxx_eval_component_reference): Just return an empty
	CONSTRUCTOR for an empty class.

From-SVN: r233945
parent 2e981ba0
2016-03-03 Jason Merrill <jason@redhat.com>
PR c++/67364
* constexpr.c (cxx_eval_component_reference): Just return an empty
CONSTRUCTOR for an empty class.
2016-03-01 Jason Merrill <jason@redhat.com>
PR c++/70036
......
......@@ -1988,11 +1988,12 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
}
if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole)
&& !is_empty_class (TREE_TYPE (part)))
&& !is_really_empty_class (TREE_TYPE (t)))
{
/* 'whole' is part of the aggregate initializer we're currently
building; if there's no initializer for this member yet, that's an
error. */
error. But expand_aggr_init_1 doesn't bother to initialize really
empty classes, so ignore them here, too. */
if (!ctx->quiet)
error ("accessing uninitialized member %qD", part);
*non_constant_p = true;
......
// PR c++/67364
// { dg-do compile { target c++11 } }
template <typename Xn>
struct element : Xn {
constexpr element() : Xn() { }
};
template <typename Xn>
struct closure {
element<Xn> member;
constexpr closure() { }
};
struct empty { struct {} s; };
constexpr closure<empty> tup{};
constexpr empty first = tup.member;
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