aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/checks.adb
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2021-03-01 16:23:38 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2021-06-17 10:32:09 -0400
commit9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d (patch)
treea2fb8793cfe7859293527715c39b80adb66155c1 /gcc/ada/checks.adb
parentf54fb769ec25976858e6bdea9c6a1beeb70f91fa (diff)
downloadgcc-9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d.zip
gcc-9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d.tar.gz
gcc-9e1ca4e3ab0fb7156fed4480c8f35810d00ff84d.tar.bz2
[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).
Diffstat (limited to 'gcc/ada/checks.adb')
-rw-r--r--gcc/ada/checks.adb21
1 files changed, 4 insertions, 17 deletions
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 877a982..d8cdb64 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