From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id 5029D398403C for ; Thu, 22 Oct 2020 12:12:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5029D398403C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=derodat@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 6FB56117AF0; Thu, 22 Oct 2020 08:12:13 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 0vZlJvu5PknF; Thu, 22 Oct 2020 08:12:13 -0400 (EDT) Received: from tron.gnat.com (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) by rock.gnat.com (Postfix) with ESMTP id 2F9CA117AF5; Thu, 22 Oct 2020 08:12:13 -0400 (EDT) Received: by tron.gnat.com (Postfix, from userid 4862) id 2EAD4D9; Thu, 22 Oct 2020 08:12:13 -0400 (EDT) Date: Thu, 22 Oct 2020 08:12:13 -0400 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Eric Botcazou Subject: [Ada] Enable the support of 128-bit integer types by default Message-ID: <20201022121213.GA4226@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="azLHFNyN32YCQGCU" Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 22 Oct 2020 12:12:19 -0000 --azLHFNyN32YCQGCU Content-Type: text/plain; charset=us-ascii Content-Disposition: inline This enables the support of 128-bit integer types by default on 64-bit platforms (except for BB ports): the -gnate128 switch is removed and the debug switch -gnatd.H can now be used to disable again the support. Technically speaking, apart from the obvious effect on integer types, this will bump the size of the type representing Universal_Integer in the compiler to 128 bits, which means that the attributes returning UI will be properly range-checked when assigned e.g. to a 64-bit variable. This will also bump the bit-packing limit from 64 to 128 bits, which means that components up to 128 instead of 64 bits can be bit-packed in array or record types subject to aspect/pragma Pack. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * Makefile.rtl (GNATRTL_128BIT_PAIRS): Add i-cexten.ads. * debug.adb (d.H): Document new usage. * doc/gnat_rm/representation_clauses_and_pragmas.rst (Size Clauses): Document new limit on 64-bit platforms. (Component_Size Clauses): Likewise. (Pragma Pack for Arrays): Likewise. (Pragma Pack for Records): Likewise. (Record Representation Clauses): Likewise. * gnat_rm.texi: Regenerate. * gnat1drv.adb (Adjust_Global_Switches): Rewrite code enabling or disabling the support for 128-bit integer types. * switch-c.adb (Scan_Front_End_Switches): Do not deal with e128. * usage.adb (Write_Switch_Char): Do not print -gnate128 switch. * libgnat/i-cexten__128.ads: New file. gcc/testsuite/ * ada/acats/run_all.sh: Define and substitute target_{max,min}_int. * ada/acats/support/macro.dfs: Parameterize {MAX,MIN}_INT. * gnat.dg/assert1.adb: Adjust conditionally to 128-bit integer types. * gnat.dg/size_clause1.adb: Do not expect a warning for LP64 targets. * gnat.dg/warn11.adb: Likewise. * gnat.dg/specs/rep_clause5.ads (Array_2_Type): Add alignment clause. --azLHFNyN32YCQGCU Content-Type: application/gzip Content-Disposition: attachment; filename="patch.diff.gz" Content-Transfer-Encoding: base64 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 KjJv2eQtS3urkJaLN3cyb9nkLUt7q5Cdi4rMW3XyVk17q5Cki4rMW3XyVk17q5Cri4rMW3Xy Vk17q5Cyi4rMW3XyVk17q5C5i4rMW3XyVk17q5DAi4rMW3XyVs3cFOTzeFGR3xcENwZpbxXS eVGReatO3qppbxWyelGReatO3qppbxWSe/E+Z+atOnmrpr1VyPFFReYtl7zlaG8VUn1RkXnL JW852luFjF9UZN5yyVuO9lYh8RcVmbdc8pajvVXI/0VF5i2XvOVobxXSgFGRecslbznaW4Vs YFRk3nLJW465684nBaMiv/EO7rzT3irkBqMi85ZL3nK0twopwkHhM2+55C1He6uQKYyKzFs+ ecvT3iokDKMi85ZP3vK0twp5w6jIvOWTtzztrUL6MCoyb/nkLU97q5BFjIrMWz55y9PeKiQT oyLzlk/e8rS3CjnFqMi85ZO3PO2tQmoxKjJv+eQtz7S1+AxjVOSdLdDaor1VSDQOiibzlk/e 8rS3CvnGqMi81SRvNbS3CmnHqMi81SRvNbS3CtnHqMi81SRvNbS3CknIqMi81SRvNbS3CrnI qMi81SRvNbS3CinJqMi81SRvNbS3CpnJqMi81SRvNbS3CgnKqMi81SRvNbS3CnnKqMi81SRv NUzfmE9XDoohW4nKgt4x1zwuRC1HDdE/hg1kpoNcSl6OmryJLEAXWTBt5FIQc9TknWQBWsmC 6SWXcpmjJm8nC9BPFkxDuRTTHDV5T1mAprJgusql1OaoyRvLAnSWBdNaLoU4R03eXRagvSyY /nIp0zlq8hazAD1mwTSZSxHPUZP3mQVoNAum01xKfEZNHuMI35ZKM24sBUBHTe5GGOdg8xyF POioISIdMNPBuLEUDx01uRthsINLdpTSoqMmdyNMd3DxjlJ4dNTkboQRDy7jUcqSjprcjTDn wQU9StHSUZO7EYY9uLRHKWk6anI3wsQHF/koBU9HTe5GGPvgch+lHGrUENEPmP1gwh/FWOqo yd0IAiCSSYAUU6qjJncjSIFIJgZSDK2OGiJlBWNWjBtLGdZRk7sR5EEkEwgpRlpHTe5GEAqR TCqkmHAdNbkbQTJEMtGQYuB11ORuBPEQyeRDivnXUZO7EWREJBMSIeOw4fl9zONSX+IH/6/G Z/RvvlzdX3w4uDhcrX8Fj+6Hb3fP+KenmDzwH30UnvHvjdlvF3Av/O7GDY1Pdf31Zv17dd7J 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 2gAA --azLHFNyN32YCQGCU--