aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-06-23 12:50:50 +0200
committerRichard Biener <rguenther@suse.de>2023-06-23 14:16:22 +0200
commit2acbbf41d4c2a3362991863ce265041f9a2feee4 (patch)
treeee4272ecda30174ca71f5a3601f95f2be4f1c9ac
parent96854fd753868d26dd8f270fff8c3703f7cb6c86 (diff)
downloadgcc-2acbbf41d4c2a3362991863ce265041f9a2feee4.zip
gcc-2acbbf41d4c2a3362991863ce265041f9a2feee4.tar.gz
gcc-2acbbf41d4c2a3362991863ce265041f9a2feee4.tar.bz2
Fix initializer_constant_valid_p_1 TYPE_PRECISION use
initializer_constant_valid_p_1 is letting through all conversions of float vector types that have the same number of elements but that's of course not valid. The following restricts the code to scalar floating point types as was probably intended (only scalar integer types are handled as well). * varasm.cc (initializer_constant_valid_p_1): Only allow conversions between scalar floating point types.
-rw-r--r--gcc/varasm.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index dd84754..f2a19aa 100644
--- a/gcc/varasm.cc
+++ b/gcc/varasm.cc
@@ -4885,7 +4885,8 @@ initializer_constant_valid_p_1 (tree value, tree endtype, tree *cache)
/* Allow length-preserving conversions between integer types and
floating-point types. */
if (((INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type))
- || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type)))
+ || (SCALAR_FLOAT_TYPE_P (dest_type)
+ && SCALAR_FLOAT_TYPE_P (src_type)))
&& (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type)))
return initializer_constant_valid_p_1 (src, endtype, cache);