This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ada/48012] New: The executable file hangs up by combination of controlled-type, generic, renames and Inline_Always
- From: "demoonlit at panathenaia dot halfmoon.jp" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 7 Mar 2011 07:47:08 +0000
- Subject: [Bug ada/48012] New: The executable file hangs up by combination of controlled-type, generic, renames and Inline_Always
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48012
Summary: The executable file hangs up by combination of
controlled-type, generic, renames and Inline_Always
Product: gcc
Version: 4.5.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ada
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: demoonlit@panathenaia.halfmoon.jp
Created attachment 23564
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=23564
minimal bug triggering source code
My application hangs up conpilied with gcc-4.5.2.
1. declare a controlled-type (named T) as private.
2. declare a generic function (named G) return T.
3. instantiate G.
4. declare a function (named F) renames it, and write pramga Inline_Always.
5. call F, it may hang up!
Probably, an object of T is attached to a finalization list, twice.
-- iacm.adb
with iact;
with iacp;
procedure iacm is
X : iact.T := iacp.F; -- hang up !!
begin
null;
end iacm;
-- iact.ads
with Ada.Finalization;
package iact is
type T is private; -- hidden controll type
generic function G return T;
private
type T is new Ada.Finalization.Controlled with null record;
end iact;
-- iact.adb
package body iact is
function G return T is
begin
return (Ada.Finalization.Controlled with null record);
end G;
end iact;
-- iacp.ads
with iact;
package iacp is
function F return iact.T;
pragma Inline_Always (F); -- this pragma causes hang up
private
function G is new iact.G;
function F return iact.T renames G;
end iacp;
% gnatmake iacm
gcc -c iacm.adb
gcc -c iacp.ads
gcc -c iact.adb
gnatbind -x iacm.ali
gnatlink iacm.ali
% ./iacm
( hang up !! )