From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by sourceware.org (Postfix) with ESMTPS id 9E24E385BAE1 for ; Mon, 4 Jul 2022 07:50:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9E24E385BAE1 Received: by mail-ej1-x630.google.com with SMTP id o25so15261936ejm.3 for ; Mon, 04 Jul 2022 00:50:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=GOV63s/ES0wkv/+WAgdBAqtiU44T3Qk7izg8tf5KuGM=; b=MV4FtVKg7Iaz/88mNumt/axfri5KFhz/oeTGNr2hqsV/mFOWtm6Go7rSYdgGeFi1FU wjX8bNan87iPGwcbQm95YFzmXq8+9TE0dnkEvF4lloOqICo5zN8Iu+zYT16u8prYuIiG Bl/0aOMG1gyw4NNQOX2yTGXLITH/WseUZX2pxl3x59OfzHGiQE9ZLuRdu5NDZxyrtzfE 2gFk05Q0K+uaanbMoMNKBIJS89DaswcaIHpflkyyu5Vak0qef2g8ydoJm91vdJXjIxZo 7S6w3NplZMRG1T86C3vXkS9Fi7LwmGi1Z6qXzzZq9+0UR7qnMR75BQ9pQyfJheF51Ug4 w26w== X-Gm-Message-State: AJIora/saM234tXlsOW7gr38+fDj8s765krUm527wMxhH0j3LIcIS6YT YIZfb3EVN1citiiqI3MQzcyrBykNN2KJ7A== X-Google-Smtp-Source: AGRyM1u2iLhrRMRSkJD2ECJiFXYmrzDs8cgtZ0pPgdE2P2T8kJLg/XeeklJYFg3fbb1+BVYBT6CW6g== X-Received: by 2002:a17:907:6e1e:b0:726:be5e:7130 with SMTP id sd30-20020a1709076e1e00b00726be5e7130mr27829894ejc.381.1656921013264; Mon, 04 Jul 2022 00:50:13 -0700 (PDT) Received: from adacore.com ([45.147.211.82]) by smtp.gmail.com with ESMTPSA id dy10-20020a05640231ea00b004358c3bfb4csm20315764edb.31.2022.07.04.00.50.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Jul 2022 00:50:12 -0700 (PDT) Date: Mon, 4 Jul 2022 07:50:12 +0000 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Steve Baird Subject: [Ada] Avoid unwanted warnings for statically-known-successful assertions Message-ID: <20220704075012.GA99099@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="AqsLC8rIMeq19msA" Content-Disposition: inline X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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-List-Received-Date: Mon, 04 Jul 2022 07:50:15 -0000 --AqsLC8rIMeq19msA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline The -gnatwc switch enables warnings for test condition outcomes that are known at compile time. Such warnings are unlikely to be useful in the case of an assertion expression (or a subexpression thereof), so do not generate them in that case. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * sem_warn.adb (Warn_On_Constant_Valid_Condition): Do not generate a warning if the expression in question is an assertion expression, or a subexpression thereof. But do call Test_Comparison so that it can generate warnings for the cases that it generates warnings for. * sem_prag.ads: Modify Assertion_Expression_Pragma constant so that the predicate Sem_Util.In_Assertion_Expression_Pragma returns True for the expression of a Compile_Time_Error pragma. --AqsLC8rIMeq19msA Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="patch.diff" diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -135,6 +135,7 @@ package Sem_Prag is Pragma_Assert_And_Cut => True, Pragma_Assume => True, Pragma_Check => True, + Pragma_Compile_Time_Error => True, Pragma_Contract_Cases => True, Pragma_Default_Initial_Condition => True, Pragma_Initial_Condition => True, diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -3401,9 +3401,14 @@ package body Sem_Warn is False_Result => False_Result); -- Warn on a possible evaluation to False / True in the presence of - -- invalid values. + -- invalid values. But issue no warning for an assertion expression + -- (or a subexpression thereof); in particular, we don't want a + -- warning about an assertion that will always succeed. - if True_Result then + if In_Assertion_Expression_Pragma (Op) then + null; + + elsif True_Result then Error_Msg_N ("condition can only be False if invalid values present?c?", Op); --AqsLC8rIMeq19msA--