aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-04-12 09:54:32 +0200
committerRichard Biener <rguenther@suse.de>2022-04-12 10:53:46 +0200
commit1bd96873cf73c4f59de48e9bc0d17a498f1ede04 (patch)
treeebe308251d20cd5e901aa463ebd1f44ee609acf6
parent62d5bb0f35fb6ec373eaac942755585a633528a0 (diff)
downloadgcc-1bd96873cf73c4f59de48e9bc0d17a498f1ede04.zip
gcc-1bd96873cf73c4f59de48e9bc0d17a498f1ede04.tar.gz
gcc-1bd96873cf73c4f59de48e9bc0d17a498f1ede04.tar.bz2
tree-optimization/105232 - handle overly large sizes in component_ref_size
The following properly checks tree_fits_poly_int64_p before converting a size to a poly_int64. 2022-04-12 Richard Biener <rguenther@suse.de> PR tree-optimization/105232 * tree.cc (component_ref_size): Bail out for too large or non-constant sizes.
-rw-r--r--gcc/tree.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/tree.cc b/gcc/tree.cc
index 8f83ea1..609f0b4 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -12961,6 +12961,8 @@ component_ref_size (tree ref, special_array_member *sam /* = NULL */)
to struct types with flexible array members. */
if (memsize)
{
+ if (!tree_fits_poly_int64_p (memsize))
+ return NULL_TREE;
poly_int64 memsz64 = memsize ? tree_to_poly_int64 (memsize) : 0;
if (known_lt (baseoff, memsz64))
{