diff --git a/gcc/algol68/a68-low-moids.cc b/gcc/algol68/a68-low-moids.cc index 4dbf1189162..b5bf46c8cf8 100644 --- a/gcc/algol68/a68-low-moids.cc +++ b/gcc/algol68/a68-low-moids.cc @@ -688,7 +688,26 @@ a68_lower_moids (MOID_T *mode) for (MOID_T *m = mode; m != NO_MOID; FORWARD (m)) { - if (!COMPLETE_TYPE_P (CTYPE (m))) + if (IS_UNION (m)) + { + tree union_type = CTYPE (m); + tree c_union_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (union_type))); + + if (!COMPLETE_TYPE_P (c_union_type)) + { + layout_type (c_union_type); + compute_record_mode (c_union_type); + gcc_assert (COMPLETE_TYPE_P (c_union_type)); + } + + if (!COMPLETE_TYPE_P (union_type)) + { + layout_type (union_type); + compute_record_mode (union_type); + gcc_assert (COMPLETE_TYPE_P (union_type)); + } + } + else if (!COMPLETE_TYPE_P (CTYPE (m))) { if (IS_STRUCT (m)) { @@ -696,20 +715,6 @@ a68_lower_moids (MOID_T *mode) layout_type (struct_type); compute_record_mode (struct_type); } - else if (IS_UNION (m)) - { - tree union_type = CTYPE (m); - tree c_union_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (union_type))); - - if (!COMPLETE_TYPE_P (c_union_type)) - { - layout_type (c_union_type); - compute_record_mode (c_union_type); - } - - layout_type (union_type); - compute_record_mode (union_type); - } else layout_type (CTYPE (m)); }