public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Marc Poulhi?s <dkm@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-4963] ada: Make Sem_Util.Is_Aliased_View predicate more robust Date: Tue, 3 Jan 2023 09:33:59 +0000 (GMT) [thread overview] Message-ID: <20230103093359.1101F3858C36@sourceware.org> (raw) https://gcc.gnu.org/g:83d52e6de23f65cefde615183cdef1eb94d18b1f commit r13-4963-g83d52e6de23f65cefde615183cdef1eb94d18b1f Author: Eric Botcazou <ebotcazou@adacore.com> Date: Wed Dec 7 17:26:27 2022 +0100 ada: Make Sem_Util.Is_Aliased_View predicate more robust The predicate implements the rules of the language so it needs to cope with constructs rewritten by the expander, in particular explicit dereferences that the expander uses liberally for various purposes. This change makes the detection of rewritten calls more robust, plugging an existing loophole for specific objects and exposing a missing propagation of the Is_Aliased flag for certain build-in-place objects, as well as adds the detection of rewritten return objects. It also contains a small enhancement to Set_Debug_Info_Defining_Id aimed at making it easier to debug the generated code by means of -gnatD. gcc/ada/ * sem_util.ads (Set_Debug_Info_Defining_Id): Adjust comment. * sem_util.adb (Is_Aliased_View) <N_Explicit_Dereference>: Return false for more artificial dereferences generated by the expander. (Set_Debug_Info_Defining_Id): Set Debug_Info_Needed unconditionally in -gnatD mode. * exp_ch6.adb (Replace_Renaming_Declaration_Id): Also preserve the Is_Aliased flag. Diff: --- gcc/ada/exp_ch6.adb | 4 ++++ gcc/ada/sem_util.adb | 13 +++++++++++-- gcc/ada/sem_util.ads | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 0bc2559751b..975a96668df 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -9378,6 +9378,10 @@ package body Exp_Ch6 is Preserve_Comes_From_Source (Orig_Id, Orig_Decl); Set_Comes_From_Source (New_Id, False); + + -- Preserve aliased indication + + Set_Is_Aliased (Orig_Id, Is_Aliased (New_Id)); end Replace_Renaming_Declaration_Id; --------------------------------- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index a1cebb08291..3132446515b 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -15255,8 +15255,15 @@ package body Sem_Util is then return Is_Aliased_View (Expression (Obj)); + -- The dereference of an access-to-object value denotes an aliased view, + -- but this routine uses the rules of the language so we need to exclude + -- rewritten constructs that introduce artificial dereferences. + elsif Nkind (Obj) = N_Explicit_Dereference then - return Nkind (Original_Node (Obj)) /= N_Function_Call; + return not Is_Captured_Function_Call (Obj) + and then not + (Nkind (Parent (Obj)) = N_Object_Renaming_Declaration + and then Is_Return_Object (Defining_Entity (Parent (Obj)))); else return False; @@ -27394,7 +27401,9 @@ package body Sem_Util is procedure Set_Debug_Info_Defining_Id (N : Node_Id) is begin - if Comes_From_Source (Defining_Identifier (N)) then + if Comes_From_Source (Defining_Identifier (N)) + or else Debug_Generated_Code + then Set_Debug_Info_Needed (Defining_Identifier (N)); end if; end Set_Debug_Info_Defining_Id; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index b61695ea729..dc1bb084b54 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -3096,8 +3096,8 @@ package Sem_Util is -- associated name (i.e. the Node_Id associated with its name). procedure Set_Debug_Info_Defining_Id (N : Node_Id); - -- Call Set_Debug_Info_Needed on Defining_Identifier (N) if it comes - -- from source. + -- Call Set_Debug_Info_Needed on Defining_Identifier (N) if it comes from + -- source or we are in -gnatD mode, where we are debugging generated code. procedure Set_Debug_Info_Needed (T : Entity_Id); -- Sets the Debug_Info_Needed flag on entity T , and also on any entities
reply other threads:[~2023-01-03 9:33 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230103093359.1101F3858C36@sourceware.org \ --to=dkm@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).