https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65683
Bug ID: 65683
Summary: [5 regression] access types across "limited with"
breaks restriction of No_Elaboration_Code
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ada
Assignee: unassigned at gcc dot gnu.org
Reporter: demoonlit at panathenaia dot halfmoon.jp
package pkg_a is
type T is null record; -- non-controlled type
end pkg_a;
pragma Restrictions (No_Elaboration_Code);
limited with pkg_a;
package pkg_b is
type P is access all pkg_a.T;
for P'Storage_Size use 0;
end pkg_b;
Compile it with gcc-4.9.2.
% gcc -c pkg_b.ads
(success with no messages)
Compile it with gcc-5-20150405.
% gcc -c pkg_b.ads
pkg_b.ads:5:09: violation of restriction "no_elaboration_code" at line 2
See pkg_b.ads.dg by -gnatD, the unnecessary master is generated.
pragma restrictions (no_elaboration_code);
limited with pkg_a;
with system.system__soft_links;
with system.system__tasking;
package pkg_b is
pkg_b___master : constant system__tasking__master_id :=
system__soft_links__current_master.all;
pkg_b__pM : system__tasking__master_id renames pkg_b___master;
type pkg_b__p is access all pkg_a.t;
for pkg_b__p'storage_size use 0;
freeze pkg_b__p []
end pkg_b;
[subtype T1s is String (1 .. 73);]
freeze_generic T1s
freeze_generic object_pointer
This master has not appeared until gcc-4.9.
And, if "limited" is removed, it disappears with gcc-5-20150405.