Commit 5b884e94 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/92015 (internal compiler error: in cxx_eval_array_reference, at cp/constexpr.c:2568)

	PR c++/92015
	* constexpr.c (cxx_eval_component_reference, cxx_eval_bit_field_ref):
	Use STRIP_ANY_LOCATION_WRAPPER on CONSTRUCTOR elts.

	* g++.dg/cpp0x/constexpr-92015.C: New test.

From-SVN: r277267
parent afa8c090
2019-10-21 Jakub Jelinek <jakub@redhat.com>
PR c++/92015
* constexpr.c (cxx_eval_component_reference, cxx_eval_bit_field_ref):
Use STRIP_ANY_LOCATION_WRAPPER on CONSTRUCTOR elts.
2019-10-21 Marek Polacek <polacek@redhat.com>
PR c++/92062 - ODR-use ignored for static member of class template.
......
......@@ -2887,7 +2887,10 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
: field == part)
{
if (value)
return value;
{
STRIP_ANY_LOCATION_WRAPPER (value);
return value;
}
else
/* We're in the middle of initializing it. */
break;
......@@ -2977,6 +2980,7 @@ cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
{
tree bitpos = bit_position (field);
STRIP_ANY_LOCATION_WRAPPER (value);
if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
return value;
if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
......
2019-10-21 Jakub Jelinek <jakub@redhat.com>
PR c++/92015
* g++.dg/cpp0x/constexpr-92015.C: New test.
2019-10-21 Marek Polacek <polacek@redhat.com>
PR c++/92062 - ODR-use ignored for static member of class template.
......
// PR c++/92015
// { dg-do compile { target c++11 } }
struct S1 { char c[6] {'h', 'e', 'l', 'l', 'o', 0}; };
struct S2 { char c[6] = "hello"; };
static_assert (S1{}.c[0] == 'h', "");
static_assert (S2{}.c[0] == 'h', "");
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