From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by sourceware.org (Postfix) with ESMTPS id F3D873857C74 for ; Wed, 20 Oct 2021 19:27:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F3D873857C74 Received: by mail-lj1-x22c.google.com with SMTP id r6so361452ljg.6 for ; Wed, 20 Oct 2021 12:27:46 -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=5LwiZqZwET5iJTFT+e4RMfgvnhGuYOsf8ST57pOls3Y=; b=WcNE5VJIUfUritnq8RxHmJZ2kRy/RrsSwxRvfA/jewgBszjSGkdnAaoFCVpAJ/QB/w giaTWeSv0pqtKbC6P+dGAR3bJNPNYiUIJ9VvzVMaVQL0N4OsSuguZLGHCG/woP/fZsZF XdIdwrpjyr5qUukq3D4oeUMb3nwZsLYhR1iMFO/lAz4Oo/ct2OmHjkU8RxNvgrR5dkOJ kRvoesfE28nWx01sjlr8V5fG/0amIFGOSiyYGaYI+vhUyUFfd6bxLY5spLOa1DUmkRra 43Mt0z2aaN5jSHiF1OiNx5xA13jASJCM4nMvhFRiDjLxYTiSaP3UEEvqN9lrrr4JNKIC 8iUg== X-Gm-Message-State: AOAM533DWoi78BSlliMcLeUQSvPvItCcPsyhsTyEbQSvzVau9GW9QMeo py8IZWqiZZHTeRdEOtHlDDiqv82rCTOzkLUm X-Google-Smtp-Source: ABdhPJxpALuJ51tc5704NSP79xJePV2cj9RlQA0ibSLZCjKG1Xy3a8GEOv5TxazRUx1VCi5ie+yCDw== X-Received: by 2002:a2e:9205:: with SMTP id k5mr980270ljg.451.1634758065600; Wed, 20 Oct 2021 12:27:45 -0700 (PDT) Received: from adacore.com ([2a02:2ab8:224:2ce:72b5:e8ff:feef:ee60]) by smtp.gmail.com with ESMTPSA id a14sm258890lfi.281.2021.10.20.12.27.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Oct 2021 12:27:44 -0700 (PDT) Date: Wed, 20 Oct 2021 19:27:43 +0000 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [Ada] tech debt: Clean up Uint fields, such as Esize Message-ID: <20211020192743.GA3154200@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Content-Disposition: inline X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Wed, 20 Oct 2021 19:27:48 -0000 --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Use No_Uint to indicate "unknown" or "not yet known" for various fields whose type is Uint, instead of using Uint_0. Otherwise Uint_0 could be ambiguous -- it could also mean "value is known, and is zero". This patch does not fix all bugs in this area, but fixes most of them, and adds assertions that should prevent new ones. Work around unset sizes: Previous changes caused several latent bugs to become crashes in e.g. gnat-llvm, because some size-related fields aren't set. Previously, unset fields defaulted to Uint_0, but now they default to No_Uint, which crashes on most operations, such as "=" and ">". This patch turns them back into latent bugs by checking for No_Uint explictly. Misc cleanup. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * atree.ads: Comment improvements. How is a "completely new node" different from a "new node"? Document default values corresponding to field types. * exp_ch7.adb (Process_Tagged_Type_Declaration): Use higher-level Scope_Depth instead of Scope_Depth_Value. Remove confusing comment: not clear what a "true" library level package is. * uintp.adb (Image_Out): Print No_Uint in a more readable way. * gen_il-gen.adb, gen_il-gen-gen_entities.adb, gen_il-gen-gen_nodes.adb, gen_il-types.ads: Tighten up the subtypes of fields whose type is Uint, where possible; use more-constrained subtypes such as Unat. * einfo-utils.adb, einfo-utils.ads, exp_attr.adb, exp_ch3.adb, exp_intr.adb, exp_unst.adb, exp_util.adb, freeze.adb, repinfo.adb, sem.adb, sem_ch12.adb, sem_ch13.adb, sem_ch3.adb, sem_ch8.adb, sem_util.adb, sprint.adb, treepr.adb: No longer use Uint_0 to indicate "unknown" or "not yet known" for various fields whose type is Uint. Use No_Uint for that, except in a small number of legacy cases that cause test failures. Protect many queries of such fields with calls to Known_... functions. Improve comments. * exp_aggr.adb: Likewise. (Is_OK_Aggregate): Check whether Csiz is present. (Aggr_Assignment_OK_For_Backend): Ensure we do not access an uninitialized size. * exp_strm.adb (Build_Elementary_Input_Call, Build_Elementary_Write_Call): Check whether P_Size is present. * cstand.adb: Leave Component_Size of Any_Composite unknown. Similar for RM_Size of Standard_Exception_Type. These should not be used. * einfo.ads: Comment improvements. * exp_disp.ads: Minor. * gen_il-internals.ads, gen_il-internals.adb: Minor. * sinfo-utils.adb: Take advantage of full-coverage rules. * types.h: Minor. --vkogqOf2sHV7VnPd Content-Type: application/gzip Content-Disposition: attachment; filename="patch.diff.gz" Content-Transfer-Encoding: base64 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 SPAZ/y0NAQA= --vkogqOf2sHV7VnPd--