From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by sourceware.org (Postfix) with ESMTPS id 488F43857017 for ; Mon, 12 Sep 2022 08:19:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 488F43857017 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-wr1-x436.google.com with SMTP id d2so14085136wrn.1 for ; Mon, 12 Sep 2022 01:19:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date; bh=sRRNynWbQpiCB6efwv5KwTU9Apk5r+VU5q7QKaJ24d4=; b=V2vOCZn05zinNW5iwLql7v+PyrINA1PhCjKeMRp60Cxo2JaS/V2kx+XeAXyE/dbPeg CNWCyAA408gAKlIGw/Pr9UHObs/HM16E17Sc11zHJxAcXH9bBpvSrUQnYanRul9A2gxO TQT3IIRfSpBcEmsEYOzAUHmGrvtDJ7AE952hKi3D5viKl3+o30ehVhmGIqeRjSe71IHN 3cxR1Mr6LhrG7lDhlzd4xHKE99uAN9peFBb7P+fR0ADbmGQV00NcSHM1e/Jj6+sUQoVa 0KoajWKpjX6ds+ZSLmVAcfgTW8lkAPStR4Vkxhz4Aoqaj77lO5exJvyt7RuCtE0hWtec Ycgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date; bh=sRRNynWbQpiCB6efwv5KwTU9Apk5r+VU5q7QKaJ24d4=; b=6vjQOsnde2p3ywKOAblJJF5j4ef5VcL+aXLgPVd5EY5iyLAA3YXzf1i1HwtXAS6tfD KEpSQCKCZbdM42dtiZr9afShK01SK1te0cGW1xJM117zhIcUMxXPxIp9MERvCKYhJaX/ d+E2K2Y47JdBvSByeS6SFeouXvr2TKmqBU3hvm0I+uudj/bqLVW4oy9yIid2IJN5YOje MAFEMuLVa9FVYoI2Fki0jnU7CIDX6VjfiAXKc1QXlkDhJtgnuEAoBQEvZ0Fk5PRLR7wr v8Sy/7+kXURi88iY1VDi5IwpdndnCJqej/QS5/6fUZtC7WcATZTVuxhN/5g4aNyrkBZ0 BTuQ== X-Gm-Message-State: ACgBeo1EoBPIBHfMZZ/wFH95MLO92BM0IzhCdLhjdFgFCgAdsdYUZICW jxQ8KuaTkFacaj4nPt9KnaC7x9fwaHIjEw== X-Google-Smtp-Source: AA6agR58fEQhnRBMMRYnQYfyiso7fs20mX/XGGuUy/LRyTy/FiLEZpzi5y/0PIE/bm2SN03y6GDoBA== X-Received: by 2002:adf:fc91:0:b0:228:afa5:2432 with SMTP id g17-20020adffc91000000b00228afa52432mr14244432wrr.255.1662970758133; Mon, 12 Sep 2022 01:19:18 -0700 (PDT) Received: from poulhies-Precision-5550 (lmontsouris-659-1-24-67.w81-250.abo.wanadoo.fr. [81.250.175.67]) by smtp.gmail.com with ESMTPSA id t6-20020a5d5346000000b00228e071baadsm7798262wrv.36.2022.09.12.01.19.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Sep 2022 01:19:17 -0700 (PDT) Date: Mon, 12 Sep 2022 10:19:16 +0200 From: Marc =?iso-8859-1?Q?Poulhi=E8s?= To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [Ada] Fix bugs in check-related warnings. Message-ID: <20220912081916.GA1512813@poulhies-Precision-5550> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="IS0zKkzwUGydFO0o" Content-Disposition: inline X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,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 List-Id: --IS0zKkzwUGydFO0o Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Make sure warnings about wrong-length aggregates don't get suppressed. Such a warning (in a with-ed unit) can be the only explanation for an error about No_Elaboration_Code violations. Avoid passing a bogus "#" to Error_Msg. We really should never construct message templates by concatenating strings that can come from input data, but there are too many cases of that to clean up. The message template parameters should really be of a type other than String, to avoid these kinds of bugs, but again, that's too much work to clean up now. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * checks.adb (Selected_Length_Checks): In the message for an aggregate that has too few or too many elements, add "!!" to make sure the warning gets printed in with'ed units. Note that we have to put "!!" before the "??", because Compile_Time_Constraint_Error detects warnings by comparing the last character of the message with '?' (which is bit dubious, but we're not changing that here). (Length_Mismatch_Info_Message): Use Unat for some things that can't be negative. Specify Decimal instead of Auto in calls to UI_Image. * sem_util.adb (Compile_Time_Constraint_Error): Minor. * uintp.adb (Image_Uint): It's always better to initialize objects on their declaration. --IS0zKkzwUGydFO0o Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="patch.diff" diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -9951,8 +9951,8 @@ package body Checks is -- Typ'Length /= Exp'Length function Length_Mismatch_Info_Message - (Left_Element_Count : Uint; - Right_Element_Count : Uint) return String; + (Left_Element_Count : Unat; + Right_Element_Count : Unat) return String; -- Returns a message indicating how many elements were expected -- (Left_Element_Count) and how many were found (Right_Element_Count). @@ -10150,14 +10150,14 @@ package body Checks is ---------------------------------- function Length_Mismatch_Info_Message - (Left_Element_Count : Uint; - Right_Element_Count : Uint) return String + (Left_Element_Count : Unat; + Right_Element_Count : Unat) return String is - function Plural_Vs_Singular_Ending (Count : Uint) return String; + function Plural_Vs_Singular_Ending (Count : Unat) return String; -- Returns an empty string if Count is 1; otherwise returns "s" - function Plural_Vs_Singular_Ending (Count : Uint) return String is + function Plural_Vs_Singular_Ending (Count : Unat) return String is begin if Count = 1 then return ""; @@ -10167,12 +10167,19 @@ package body Checks is end Plural_Vs_Singular_Ending; begin - return "expected " & UI_Image (Left_Element_Count) + return "expected " + & UI_Image (Left_Element_Count, Format => Decimal) & " element" & Plural_Vs_Singular_Ending (Left_Element_Count) - & "; found " & UI_Image (Right_Element_Count) + & "; found " + & UI_Image (Right_Element_Count, Format => Decimal) & " element" & Plural_Vs_Singular_Ending (Right_Element_Count); + -- "Format => Decimal" above is needed because otherwise UI_Image + -- can sometimes return a hexadecimal number 16#...#, but "#" means + -- something special to Errout. A previous version used the default + -- Auto, which was essentially the same bug as documented here: + -- https://xkcd.com/327/ . end Length_Mismatch_Info_Message; ----------------- @@ -10371,14 +10378,14 @@ package body Checks is if L_Length > R_Length then Add_Check (Compile_Time_Constraint_Error - (Wnode, "too few elements for}??", T_Typ, + (Wnode, "too few elements for}!!??", T_Typ, Extra_Msg => Length_Mismatch_Info_Message (L_Length, R_Length))); elsif L_Length < R_Length then Add_Check (Compile_Time_Constraint_Error - (Wnode, "too many elements for}??", T_Typ, + (Wnode, "too many elements for}!!??", T_Typ, Extra_Msg => Length_Mismatch_Info_Message (L_Length, R_Length))); end if; diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -6691,8 +6691,6 @@ package body Sem_Util is Wmsg : Boolean; Eloc : Source_Ptr; - -- Start of processing for Compile_Time_Constraint_Error - begin -- If this is a warning, convert it into an error if we are in code -- subject to SPARK_Mode being set On, unless Warn is True to force a diff --git a/gcc/ada/uintp.adb b/gcc/ada/uintp.adb --- a/gcc/ada/uintp.adb +++ b/gcc/ada/uintp.adb @@ -300,11 +300,9 @@ package body Uintp is function Better_In_Hex return Boolean is T16 : constant Valid_Uint := Uint_2**Int'(16); - A : Valid_Uint; + A : Valid_Uint := UI_Abs (Input); begin - A := UI_Abs (Input); - -- Small values up to 2**16 can always be in decimal if A < T16 then --IS0zKkzwUGydFO0o--