analyzer: fix ICE on RANGE_EXPR with CONSTRUCTOR value [PR96950]
gcc/analyzer/ChangeLog: PR analyzer/96950 * store.cc (binding_map::apply_ctor_to_region): Handle RANGE_EXPR where min_index == max_index. (binding_map::apply_ctor_val_to_range): Replace assertion that we don't have a CONSTRUCTOR value with error-handling.
This commit is contained in:
parent
47997a32e6
commit
af656c401e
|
@ -425,9 +425,18 @@ binding_map::apply_ctor_to_region (const region *parent_reg, tree ctor,
|
||||||
{
|
{
|
||||||
tree min_index = TREE_OPERAND (index, 0);
|
tree min_index = TREE_OPERAND (index, 0);
|
||||||
tree max_index = TREE_OPERAND (index, 1);
|
tree max_index = TREE_OPERAND (index, 1);
|
||||||
|
if (min_index == max_index)
|
||||||
|
{
|
||||||
|
if (!apply_ctor_pair_to_child_region (parent_reg, mgr,
|
||||||
|
min_index, val))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (!apply_ctor_val_to_range (parent_reg, mgr,
|
if (!apply_ctor_val_to_range (parent_reg, mgr,
|
||||||
min_index, max_index, val))
|
min_index, max_index, val))
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!apply_ctor_pair_to_child_region (parent_reg, mgr, index, val))
|
if (!apply_ctor_pair_to_child_region (parent_reg, mgr, index, val))
|
||||||
|
@ -472,7 +481,8 @@ binding_map::apply_ctor_val_to_range (const region *parent_reg,
|
||||||
gcc_assert (range_key->concrete_p ());
|
gcc_assert (range_key->concrete_p ());
|
||||||
|
|
||||||
/* Get the value. */
|
/* Get the value. */
|
||||||
gcc_assert (TREE_CODE (val) != CONSTRUCTOR);
|
if (TREE_CODE (val) == CONSTRUCTOR)
|
||||||
|
return false;
|
||||||
const svalue *sval = get_svalue_for_ctor_val (val, mgr);
|
const svalue *sval = get_svalue_for_ctor_val (val, mgr);
|
||||||
|
|
||||||
/* Bind the value to the range. */
|
/* Bind the value to the range. */
|
||||||
|
|
Loading…
Reference in New Issue