From patchwork Fri Jun 2 02:43:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 70491 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 53B34385800A for ; Fri, 2 Jun 2023 02:44:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 53B34385800A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1685673856; bh=syUqaZjYpSmAa6YclkDCObBgw6lzSN0CG7UuJYD1C0I=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=u8+wFVwdR0NvvJOipB9fgusFgk4THH/VxC0Os2zqGrDFcs1bTUSp6zV1y7Nm+gt6U kHAk0O6iU7X36hjK0DtbJrO00M0rBAxf06WrHS8PX1XrcmvcWxU3ynrEvHhyNk31EI XDYPF9hkJOqcJnf/5S4s32WuM32yXH3YsUZwgISY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id B15DC3858C2C for ; Fri, 2 Jun 2023 02:43:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B15DC3858C2C Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-108-GKScE4KDOKO76Sf1aT6DCg-1; Thu, 01 Jun 2023 22:43:45 -0400 X-MC-Unique: GKScE4KDOKO76Sf1aT6DCg-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-75b185c9736so207688485a.2 for ; Thu, 01 Jun 2023 19:43:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685673824; x=1688265824; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=syUqaZjYpSmAa6YclkDCObBgw6lzSN0CG7UuJYD1C0I=; b=NAg9OxJpne+LHhnUypzl+yWdDbVxhUIfxiv1bwvNo0i3HpeUcZP+eetB8+p3tfupJT xfof5crYKsQWEYk4jKKJoW9nePMqsA6C6T+co6NrEVGNi/+MrEQQuzFdvUl2j/YSCUNn ez2blaZq8HK3qMEkaosgGeDai+hnHtf0haYLeVkisSxVFB9Fx/sa14tIBBkoSqDSVMNe cVKXNwAPl0PGmV4fH7mNL2kI1vlg16KKRi1hY7QJdKFr+ZkNKGsclglSLmZkn3qIKmGN +SvVLRoN5RPdTum5ynyZfqdI7T3WbVXNtw0qBztDRsFaa6AbKM42g7v/e8JB/nS6xfGY ouWQ== X-Gm-Message-State: AC+VfDwMRw1MZ2tlZk/uT39kU6bdG9ac7Pheo8ug2Fr+hYm29yiinGbx 3iMB9LxqTXKtDC54p2yQPtnK2v/RmL9e2UgwGkBkhqSmgU7ETKq/bNqVKl6LOG6oXXMzSPdOAhu I1LCkEpe8D6Q2rwRG4VJIBE8OXOyNBxHWzmF0Lib4qrP7bhkXI8NG1itg/1FJVguITgfLLCRqew == X-Received: by 2002:a05:620a:8016:b0:75b:23a0:d9f8 with SMTP id ee22-20020a05620a801600b0075b23a0d9f8mr10763546qkb.78.1685673824483; Thu, 01 Jun 2023 19:43:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ64HP4xiMh6kLycnoaVKWMOFvaDztAfkyCn2oXqqzvHjn4dxXZWNMduyMNJlYe9lriCviXiDw== X-Received: by 2002:a05:620a:8016:b0:75b:23a0:d9f8 with SMTP id ee22-20020a05620a801600b0075b23a0d9f8mr10763528qkb.78.1685673824028; Thu, 01 Jun 2023 19:43:44 -0700 (PDT) Received: from jason.com (130-44-146-16.s12558.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.146.16]) by smtp.gmail.com with ESMTPSA id f16-20020a05620a12f000b0075ca4cd03d4sm96751qkl.64.2023.06.01.19.43.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Jun 2023 19:43:43 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH RFA] varasm: check float size Date: Thu, 1 Jun 2023 22:43:41 -0400 Message-Id: <20230602024341.1629656-1-jason@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Tested x86_64-pc-linux-gnu, OK for trunk? -- 8< -- In PR95226, the testcase was failing because we tried to output_constant a NOP_EXPR to float from a double REAL_CST, and so we output a double where the caller wanted a float. That doesn't happen anymore, but with the output_constant hunk we will ICE in that situation rather than emit the wrong number of bytes. Part of the problem was that initializer_constant_valid_p_1 returned true for that NOP_EXPR, because it compared the sizes of integer types but not floating-point types. So the C++ front end assumed it didn't need to fold the initializer. PR c++/95226 gcc/ChangeLog: * varasm.cc (output_constant) [REAL_TYPE]: Check that sizes match. (initializer_constant_valid_p_1): Compare float precision. --- gcc/varasm.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) base-commit: 5fccebdbd9666e0adf6dd8357c21d4ef3ac3f83f diff --git a/gcc/varasm.cc b/gcc/varasm.cc index 34400ec39ef..dd84754a283 100644 --- a/gcc/varasm.cc +++ b/gcc/varasm.cc @@ -4876,16 +4876,16 @@ initializer_constant_valid_p_1 (tree value, tree endtype, tree *cache) tree src_type = TREE_TYPE (src); tree dest_type = TREE_TYPE (value); - /* Allow conversions between pointer types, floating-point - types, and offset types. */ + /* Allow conversions between pointer types and offset types. */ if ((POINTER_TYPE_P (dest_type) && POINTER_TYPE_P (src_type)) - || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type)) || (TREE_CODE (dest_type) == OFFSET_TYPE && TREE_CODE (src_type) == OFFSET_TYPE)) return initializer_constant_valid_p_1 (src, endtype, cache); - /* Allow length-preserving conversions between integer types. */ - if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type) + /* 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))) && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type))) return initializer_constant_valid_p_1 (src, endtype, cache); @@ -5255,6 +5255,7 @@ output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align, break; case REAL_TYPE: + gcc_assert (size == thissize); if (TREE_CODE (exp) != REAL_CST) error ("initializer for floating value is not a floating constant"); else