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 11:49:59 +0200
commit008d568ac7eba4057172c52d306e09d174041c59 (patch)
tree6c5d3b445cc416ccc7ac6f779114634f247fe18f
parent249aa9348ddf06b8961a3418c74e6d83963cdc1e (diff)
downloadgcc-008d568ac7eba4057172c52d306e09d174041c59.zip
gcc-008d568ac7eba4057172c52d306e09d174041c59.tar.gz
gcc-008d568ac7eba4057172c52d306e09d174041c59.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.c (component_ref_size): Bail out for too large or non-constant sizes. (cherry picked from commit 1bd96873cf73c4f59de48e9bc0d17a498f1ede04)
-rw-r--r--gcc/tree.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 0f31843..5f87455 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -13951,6 +13951,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))
{