public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-1572] [Ada] Apply aliasing checks only to names and not to objects as actuals
@ 2021-06-17 14:33 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2021-06-17 14:33 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d

commit r12-1572-g9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d
Author: Piotr Trojanek <trojanek@adacore.com>
Date:   Mon Mar 1 16:23:38 2021 +0100

    [Ada] Apply aliasing checks only to names and not to objects as actuals
    
    gcc/ada/
    
            * checks.adb (Apply_Parameter_Aliasing_Checks): Replace calls to
            Is_Object_Reference with calls to Is_Name_Reference; remove
            asymmetric condition that only detected an aggregate as the
            first actual (aggregate objects were just a special case of an
            object reference that was not a name).

Diff:
---
 gcc/ada/checks.adb | 21 ++++-----------------
 1 file changed, 4 insertions(+), 17 deletions(-)

diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 877a982b840..d8cdb64c454 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -2507,29 +2507,16 @@ package body Checks is
       while Present (Actual_1) and then Present (Formal_1) loop
          Orig_Act_1 := Original_Actual (Actual_1);
 
-         --  Ensure that the actual is an object that is not passed by value.
-         --  Elementary types are always passed by value, therefore actuals of
-         --  such types cannot lead to aliasing. An aggregate is an object in
-         --  Ada 2012, but an actual that is an aggregate cannot overlap with
-         --  another actual.
-
-         if Nkind (Orig_Act_1) = N_Aggregate
-           or else (Nkind (Orig_Act_1) = N_Qualified_Expression
-                     and then Nkind (Expression (Orig_Act_1)) = N_Aggregate)
-         then
-            null;
-
-         elsif Is_Object_Reference (Orig_Act_1) then
+         if Is_Name_Reference (Orig_Act_1) then
             Actual_2 := Next_Actual (Actual_1);
             Formal_2 := Next_Formal (Formal_1);
             while Present (Actual_2) and then Present (Formal_2) loop
                Orig_Act_2 := Original_Actual (Actual_2);
 
-               --  The other actual we are testing against must also denote
-               --  a non pass-by-value object. Generate the check only when
-               --  the mode of the two formals may lead to aliasing.
+               --  Generate the check only when the mode of the two formals may
+               --  lead to aliasing.
 
-               if Is_Object_Reference (Orig_Act_2)
+               if Is_Name_Reference (Orig_Act_2)
                  and then May_Cause_Aliasing (Formal_1, Formal_2)
                then


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-06-17 14:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17 14:33 [gcc r12-1572] [Ada] Apply aliasing checks only to names and not to objects as actuals Pierre-Marie de Rodat

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).