https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79756
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jsm28 at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
We run into convert_vector_to_array_for_subscript /
c_common_mark_addressable_vec with
<<< Unknown tree: c_maybe_const_expr
<<< Unknown tree: compound_literal_expr
V D.1797 = {1, 0}; >>> >>>
not sure if that's intended. But due to this we fail to mark the vector
as addressable which then results in this ICE.
Fix:
Index: gcc/c-family/c-common.c
===================================================================
--- gcc/c-family/c-common.c (revision 245780)
+++ gcc/c-family/c-common.c (working copy)
@@ -6534,6 +6534,8 @@ complete_array_type (tree *ptype, tree i
void
c_common_mark_addressable_vec (tree t)
{
+ if (TREE_CODE (t) == C_MAYBE_CONST_EXPR)
+ t = C_MAYBE_CONST_EXPR_EXPR (t);
while (handled_component_p (t))
t = TREE_OPERAND (t, 0);
if (!VAR_P (t)
but note that convert_vector_to_array_for_subscript will return
VIEW_CONVERT_EXPR <array-type> (MAYBE_CONST (...)) then. Maybe proper
operation is to instead return
MAYBE_CONST (VIEW_CONVERT_EXPR <array-type> (...))?
Or the caller (build_array_ref) was supposed to strip MAYBE_CONST and
put it back around the array-ref?
I don't understand the C_MAYBE_CONST stuff very well so leaving the actual
fix to C FE maintainers.