Fix initializer_constant_valid_p_1 TYPE_PRECISION use

Message ID 20230623121452.CF5F2134FB@imap2.suse-dmz.suse.de
State Unresolved
Headers
Series Fix initializer_constant_valid_p_1 TYPE_PRECISION use |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Richard Biener June 23, 2023, 12:14 p.m. UTC
  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).

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

	* varasm.cc (initializer_constant_valid_p_1): Only
	allow conversions between scalar floating point types.
---
 gcc/varasm.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Patch

diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index dd84754a283..f2a19aa6dbd 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);