From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 DC85D385C41B for ; Fri, 1 Jul 2022 14:58:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DC85D385C41B Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-610-sETd7c8_OeWrHAYEZCbiVw-1; Fri, 01 Jul 2022 10:58:38 -0400 X-MC-Unique: sETd7c8_OeWrHAYEZCbiVw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3272B3C0ED67; Fri, 1 Jul 2022 14:58:38 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E6DEEC27D8F; Fri, 1 Jul 2022 14:58:37 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 261EwZt51651778 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 1 Jul 2022 16:58:35 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 261EwYZC1651777; Fri, 1 Jul 2022 16:58:34 +0200 Date: Fri, 1 Jul 2022 16:58:34 +0200 From: Jakub Jelinek To: Aldy Hernandez Cc: GCC patches , Andrew MacLeod , Richard Sandiford Subject: Re: [RFC] trailing_wide_ints with runtime variable lengths Message-ID: Reply-To: Jakub Jelinek References: <20220629092157.230287-1-aldyh@redhat.com> MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, 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-List-Received-Date: Fri, 01 Jul 2022 14:58:42 -0000 On Fri, Jul 01, 2022 at 04:12:55PM +0200, Aldy Hernandez wrote: > > --- a/gcc/wide-int.h > > +++ b/gcc/wide-int.h > > @@ -1373,10 +1373,13 @@ namespace wi > > : public int_traits {}; > > } > > > > -/* An array of N wide_int-like objects that can be put at the end of > > - a variable-sized structure. Use extra_size to calculate how many > > - bytes beyond the sizeof need to be allocated. Use set_precision > > - to initialize the structure. */ > > +/* A variable-lengthed array of wide_int-like objects that can be put > > + at the end of a variable-sized structure. The number of objects is > > + at most N and can be set at runtime by using set_precision(). > > + > > + Use extra_size to calculate how many bytes beyond the > > + sizeof need to be allocated. Use set_precision to initialize the > > + structure. */ > > template > > struct GTY((user)) trailing_wide_ints > > { > > @@ -1387,6 +1390,9 @@ private: > > /* The shared maximum length of each number. */ > > unsigned char m_max_len; > > > > + /* The number of elements. */ > > + unsigned char m_num_elements; IMNSHO you certainly don't want to change like this existing trailing_wide_ints, you don't want to grow unnecessarily existing trailing_wide_ints users (e.g. const_poly_int_def). My brief understanding of wide-int.h is that in some cases stuff like this is implied from template parameters or exact class instantiation and in other cases it is present explicitly and class inheritence is used to hide that stuff nicely. So, you are looking for something like trailing_wide_ints but where that N is actually a runtime value? Then e.g. the struct {unsigned char len;} m_len[N]; member can't work properly either, because it isn't constant size. Jakub