utils.c (max_size): Be prepared for an operand with VOID_TYPE.
* gcc-interface/utils.c (max_size) <tcc_unary>: Be prepared for an operand with VOID_TYPE. From-SVN: r268675
This commit is contained in:
parent
0850f23b69
commit
cc26a3bdef
@ -1,3 +1,8 @@
|
||||
2019-02-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/utils.c (max_size) <tcc_unary>: Be prepared for an
|
||||
operand with VOID_TYPE.
|
||||
|
||||
2019-02-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/trans.c (elaborate_all_entities): Do not elaborate the
|
||||
|
@ -3642,7 +3642,10 @@ fntype_same_flags_p (const_tree t, tree cico_list, bool return_unconstrained_p,
|
||||
|
||||
/* EXP is an expression for the size of an object. If this size contains
|
||||
discriminant references, replace them with the maximum (if MAX_P) or
|
||||
minimum (if !MAX_P) possible value of the discriminant. */
|
||||
minimum (if !MAX_P) possible value of the discriminant.
|
||||
|
||||
Note that the expression may have already been gimplified,in which case
|
||||
COND_EXPRs have VOID_TYPE and no operands, and this must be handled. */
|
||||
|
||||
tree
|
||||
max_size (tree exp, bool max_p)
|
||||
@ -3714,11 +3717,15 @@ max_size (tree exp, bool max_p)
|
||||
return build_int_cst (type, max_p ? 1 : 0);
|
||||
|
||||
case tcc_unary:
|
||||
if (code == NON_LVALUE_EXPR)
|
||||
return max_size (TREE_OPERAND (exp, 0), max_p);
|
||||
op0 = TREE_OPERAND (exp, 0);
|
||||
|
||||
op0 = max_size (TREE_OPERAND (exp, 0),
|
||||
code == NEGATE_EXPR ? !max_p : max_p);
|
||||
if (code == NON_LVALUE_EXPR)
|
||||
return max_size (op0, max_p);
|
||||
|
||||
if (VOID_TYPE_P (TREE_TYPE (op0)))
|
||||
return max_p ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type);
|
||||
|
||||
op0 = max_size (op0, code == NEGATE_EXPR ? !max_p : max_p);
|
||||
|
||||
if (op0 == TREE_OPERAND (exp, 0))
|
||||
return exp;
|
||||
|
Loading…
Reference in New Issue
Block a user