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.