From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 0BB223858404; Fri, 23 Jun 2023 12:16:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0BB223858404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687522608; bh=bsjzsRZ44S542bsiwGq1FdiAsryPlnyApjxQvqkwEbg=; h=From:To:Subject:Date:From; b=lQYxlh5ajUifV/ExMSd7URnnFyDFah6MzIIWJvZnSWx4OTsrmj/rlA9MmaJTPmgkI Ntq1t6GUTm7djMb7Lsxrt9RhsuWbETQFAVWfBiQ9c88OlXWWEunovf3pIAqXZ7ZKKp So2OR8bkNgpH1npXFF4rG6p7xCMVjxzsIJU3w2S8= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-2046] Fix initializer_constant_valid_p_1 TYPE_PRECISION use X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 96854fd753868d26dd8f270fff8c3703f7cb6c86 X-Git-Newrev: 2acbbf41d4c2a3362991863ce265041f9a2feee4 Message-Id: <20230623121648.0BB223858404@sourceware.org> Date: Fri, 23 Jun 2023 12:16:48 +0000 (GMT) List-Id: https://gcc.gnu.org/g:2acbbf41d4c2a3362991863ce265041f9a2feee4 commit r14-2046-g2acbbf41d4c2a3362991863ce265041f9a2feee4 Author: Richard Biener Date: Fri Jun 23 12:50:50 2023 +0200 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. Diff: --- gcc/varasm.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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);