- gnu_low = build3 (COMPONENT_REF, gnu_index_base_type,
- gnu_template_reference, gnu_low_field,
- NULL_TREE);
- gnu_high = build3 (COMPONENT_REF, gnu_index_base_type,
- gnu_template_reference, gnu_high_field,
- NULL_TREE);
- TREE_READONLY (gnu_low) = TREE_READONLY (gnu_high) = 1;
-
- /* Compute the size of this dimension. */
- gnu_max
- = build3 (COND_EXPR, gnu_index_base_type,
- build2 (GE_EXPR, boolean_type_node, gnu_high, gnu_low),
- gnu_high,
- build2 (MINUS_EXPR, gnu_index_base_type,
- gnu_low, fold_convert (gnu_index_base_type,
- integer_one_node)));
+ gnu_orig_min = build3 (COMPONENT_REF, gnu_index_base_type,
+ gnu_template_reference, gnu_lb_field,
+ NULL_TREE);
+ gnu_orig_max = build3 (COMPONENT_REF, gnu_index_base_type,
+ gnu_template_reference, gnu_hb_field,
+ NULL_TREE);
+ TREE_READONLY (gnu_orig_min) = TREE_READONLY (gnu_orig_max) = 1;
+
+ gnu_min = convert (sizetype, gnu_orig_min);
+ gnu_max = convert (sizetype, gnu_orig_max);
+
+ /* Compute the size of this dimension. See the E_Array_Subtype
+ case below for the rationale. */
+ gnu_high
+ = build3 (COND_EXPR, sizetype,
+ build2 (GE_EXPR, boolean_type_node,
+ gnu_orig_max, gnu_orig_min),
+ gnu_max,
+ size_binop (MINUS_EXPR, gnu_min, size_one_node));