diff options
author | Justin Squirek <squirek@adacore.com> | 2020-01-07 22:57:19 -0500 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-03 06:01:38 -0400 |
commit | da566eeb31056d9f40ab48688dc3fe680535ce80 (patch) | |
tree | 1061a9df6eff0d0cd091dd626c0232c37027a82b /gcc/ada/libgnat | |
parent | 79e267f9fb23da4e9553a97dc45ea757545cf521 (diff) | |
download | gcc-da566eeb31056d9f40ab48688dc3fe680535ce80.zip gcc-da566eeb31056d9f40ab48688dc3fe680535ce80.tar.gz gcc-da566eeb31056d9f40ab48688dc3fe680535ce80.tar.bz2 |
[Ada] Incorrect accessibility checking on aliased formals
2020-06-03 Justin Squirek <squirek@adacore.com>
gcc/ada/
* libgnat/a-cborse.adb, libgnat/a-cihase.adb,
libgnat/a-ciorse.adb, libgnat/a-coorse.adb: Modified to use
'Unrestricted_Access in certain cases where static accessibility
errors were triggered.
* exp_ch6.adb (Expand_Simple_Return_Statement): Add generation
of dynamic accessibility checks as determined by
Is_Special_Aliased_Formal_Access.
* sem_attr.adb (Resolve_Attribute): Add call to
Is_Special_Aliased_Formal_Access to avoid performing static
checks where dynamic ones are required.
* sem_ch6.adb (Check_Return_Obj_Accessibility): Handle renamed
objects within component associations requiring special
accessibility checks.
* sem_util.adb, sem_util.ads (Is_Special_Aliased_Formal_Access):
Created to detect the special case where an aliased formal is
being compared against the level of an anonymous access return
object.
(Object_Access_Level): Remove incorrect condition leading to
overly permissive accessibility levels being returned on
explicitly aliased parameters.
Diffstat (limited to 'gcc/ada/libgnat')
-rw-r--r-- | gcc/ada/libgnat/a-cborse.adb | 4 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-cihase.adb | 4 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-ciorse.adb | 4 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-coorse.adb | 4 |
4 files changed, 8 insertions, 8 deletions
diff --git a/gcc/ada/libgnat/a-cborse.adb b/gcc/ada/libgnat/a-cborse.adb index deca9b7..649b6c1 100644 --- a/gcc/ada/libgnat/a-cborse.adb +++ b/gcc/ada/libgnat/a-cborse.adb @@ -933,7 +933,7 @@ package body Ada.Containers.Bounded_Ordered_Sets is Control => (Controlled with Container.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Position, Old_Key => new Key_Type'(Key (Position)))) do @@ -961,7 +961,7 @@ package body Ada.Containers.Bounded_Ordered_Sets is Control => (Controlled with Container.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Find (Container, Key), Old_Key => new Key_Type'(Key))) do diff --git a/gcc/ada/libgnat/a-cihase.adb b/gcc/ada/libgnat/a-cihase.adb index c951027..1c51799 100644 --- a/gcc/ada/libgnat/a-cihase.adb +++ b/gcc/ada/libgnat/a-cihase.adb @@ -2227,7 +2227,7 @@ package body Ada.Containers.Indefinite_Hashed_Sets is Control => (Controlled with HT.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Index => HT_Ops.Index (HT, Position.Node), Old_Pos => Position, Old_Hash => Hash (Key (Position)))) @@ -2261,7 +2261,7 @@ package body Ada.Containers.Indefinite_Hashed_Sets is Control => (Controlled with HT.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Index => HT_Ops.Index (HT, P.Node), Old_Pos => P, Old_Hash => Hash (Key))) diff --git a/gcc/ada/libgnat/a-ciorse.adb b/gcc/ada/libgnat/a-ciorse.adb index 6990808..349a59d 100644 --- a/gcc/ada/libgnat/a-ciorse.adb +++ b/gcc/ada/libgnat/a-ciorse.adb @@ -1013,7 +1013,7 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Control => (Controlled with Tree.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Position, Old_Key => new Key_Type'(Key (Position)))) do @@ -1045,7 +1045,7 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Control => (Controlled with Tree.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Find (Container, Key), Old_Key => new Key_Type'(Key))) do diff --git a/gcc/ada/libgnat/a-coorse.adb b/gcc/ada/libgnat/a-coorse.adb index 156e4c6..7291e0a 100644 --- a/gcc/ada/libgnat/a-coorse.adb +++ b/gcc/ada/libgnat/a-coorse.adb @@ -899,7 +899,7 @@ package body Ada.Containers.Ordered_Sets is Control => (Controlled with Tree.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Position, Old_Key => new Key_Type'(Key (Position)))) do @@ -927,7 +927,7 @@ package body Ada.Containers.Ordered_Sets is Control => (Controlled with Tree.TC'Unrestricted_Access, - Container => Container'Access, + Container => Container'Unchecked_Access, Pos => Find (Container, Key), Old_Key => new Key_Type'(Key))) do |