aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/debug.adb
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2018-05-23 10:22:03 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-05-23 10:22:03 +0000
commit728fedc29c6708f9cb9de5062663f6d2b273c78d (patch)
tree211833fabf134b6ba51e6acff286783a3662c3c9 /gcc/ada/debug.adb
parent87843c8388536e2ed9143e56916d1ecec4e07da1 (diff)
downloadgcc-728fedc29c6708f9cb9de5062663f6d2b273c78d.zip
gcc-728fedc29c6708f9cb9de5062663f6d2b273c78d.tar.gz
gcc-728fedc29c6708f9cb9de5062663f6d2b273c78d.tar.bz2
[Ada] Compiler fails to reject illegal store of anonymous_access_to_subprogram
GNAT properly rejects an attempt to assign an access_to_subprogram formal to a local variable, according to accessibiiity rules. This patch forces the same behavior on the use of such a formal in an object declaration. Compiling store_anon.adb must yield: store_anon.adb:7:35: illegal attempt to store anonymous access to subprogram store_anon.adb:7:35: value has deeper accessibility than any master (RM 3.10.2 (13)) store_anon.adb:7:35: use named access type for "P" instead of access parameter ---- package Store_Anon is procedure Store (P : not null access procedure); procedure Invoke; end Store_Anon; ---- package body Store_Anon is type P_Ptr is access procedure; Stored : P_Ptr; procedure Store (P : not null access procedure) is Illegal : constant P_Ptr := P; begin -- Store Stored := Illegal; end Store; procedure Invoke is -- Empty begin -- Invoke Stored.all; end Invoke; end Store_Anon; 2018-05-23 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): If expression is an anonymous_access_to_ subprogram formal, apply a conversion to force an accsssibility check that will fail statically, enforcing 3.10.2 (13). From-SVN: r260576
Diffstat (limited to 'gcc/ada/debug.adb')
0 files changed, 0 insertions, 0 deletions