]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix initializer_constant_valid_p_1 TYPE_PRECISION use
authorRichard Biener <rguenther@suse.de>
Fri, 23 Jun 2023 10:50:50 +0000 (12:50 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 23 Jun 2023 12:16:22 +0000 (14:16 +0200)
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.

gcc/varasm.cc

index dd84754a283ae670243b61709a40430060b188dd..f2a19aa6dbd87a4e3357b403e012d679f4b6e1cf 100644 (file)
@@ -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);