https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65524
Bug ID: 65524 Summary: gnatbind generates decrementing the unexisting elab-counter into finalize_library 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 I found some cases that gnatbind generates decrementing the unexisting elaboration counter of each package Exxx. E142 : Short_Integer; pragma Import (Ada, E142, "system__exn_lli_E"); ... some Exxx are declared ... procedure finalize_library is begin ... E132 := E132 - 1; -- * E132 is not declared in above * ... end finalize_library; A cause is a package having _finalize_spec/_finalize_body without _elabs/_elabb. I still have not been able to make the minimal example, but have made a patch. In bindgen.adb, Gen_Elab_Externals refers U.Set_Elab_Entity to generate Exxx. However, Gen_Finalize_Library does not refer it. --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -1434,7 +1434,9 @@ package body Bindgen is -- has a finalizer. In that case, this is where we decrement -- the elaboration entity. - if U.Utype = Is_Body and then Uspec.Has_Finalizer then + if U.Utype = Is_Body and then Uspec.Has_Finalizer + and then Uspec.Set_Elab_Entity + then if not Lib_Final_Built then Gen_Header; Lib_Final_Built := True; @@ -1548,7 +1550,9 @@ package body Bindgen is WBI (" begin"); - if U.Utype /= Is_Spec then + if U.Utype /= Is_Spec + and then Uspec.Set_Elab_Entity + then Set_String (" E"); Set_Unit_Number (Unum); Set_String (" := E");