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 D9D5739A401A for ; Wed, 5 May 2021 08:20:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D9D5739A401A 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 CF635561EE; Wed, 5 May 2021 04:20:05 -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 x5ciQx1-bi5z; Wed, 5 May 2021 04:20:05 -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 AAE201174AC; Wed, 5 May 2021 04:20:05 -0400 (EDT) Received: by tron.gnat.com (Postfix, from userid 4862) id A6BA8103; Wed, 5 May 2021 04:20:05 -0400 (EDT) Date: Wed, 5 May 2021 04:20:05 -0400 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Piotr Trojanek Subject: [Ada] Fix expansion of attributes Input/Output for unchecked union types Message-ID: <20210505082005.GA31442@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2fHTh5uZTiUOsy+g" Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, 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: Wed, 05 May 2021 08:20:16 -0000 --2fHTh5uZTiUOsy+g Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Expansion of attributes Input/Output for unchecked unions didn't work, because it looked for a No_Elist where the AST has an empty list. Now we look for a default value of a first discriminant (because the default values must be given either for all or for none of the discrminants). Also, it was wrong to insert an N_Raise_Program_Error as an action and leave the original N_Attribute_Reference node, because Gigi doesn't know how to expand input or output attribute references. Now we rewrite the attribute reference just like a neighbouring code which raises Program_Error with a reason of PE_Stream_Operation_Not_Allowed. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Fix expansion of attributes Input and Output for unchecked unions. * sem_case.ads: Fix typo "disriminant" and refill comment. --2fHTh5uZTiUOsy+g Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="patch.diff" diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -4237,12 +4237,13 @@ package body Exp_Attr is -- type if the type lacks default discriminant values. if Is_Unchecked_Union (Base_Type (U_Type)) - and then No (Discriminant_Constraint (U_Type)) + and then + No (Discriminant_Default_Value (First_Discriminant (U_Type))) then - Insert_Action (N, + Rewrite (N, Make_Raise_Program_Error (Loc, Reason => PE_Unchecked_Union_Restriction)); - + Set_Etype (N, B_Type); return; end if; @@ -5332,12 +5333,13 @@ package body Exp_Attr is -- values. if Is_Unchecked_Union (Base_Type (U_Type)) - and then No (Discriminant_Constraint (U_Type)) + and then + No (Discriminant_Default_Value (First_Discriminant (U_Type))) then - Insert_Action (N, + Rewrite (N, Make_Raise_Program_Error (Loc, Reason => PE_Unchecked_Union_Restriction)); - + Set_Etype (N, Standard_Void_Type); return; end if; diff --git a/gcc/ada/sem_case.ads b/gcc/ada/sem_case.ads --- a/gcc/ada/sem_case.ads +++ b/gcc/ada/sem_case.ads @@ -44,8 +44,8 @@ -- till the freeze point in this case. -- 3. Set the Others_Discrete_Choices list for an others choice. This is --- used in various ways, e.g. to construct the disriminant checking function --- for the case of a variant with an others choice. +-- used in various ways, e.g. to construct the discriminant checking +-- function for the case of a variant with an others choice. -- 4. In the case of static predicates, we need to expand out choices that -- correspond to the predicate for the back end. This expansion destroys --2fHTh5uZTiUOsy+g--