@@ -10368,12 +10368,13 @@ package body Sem_Ch3 is
-- If Nod is a library unit entity, then Insert_After won't work,
-- because Nod is not a member of any list. Therefore, we use
-- Add_Global_Declaration in this case. This can happen if we have a
- -- build-in-place library function.
+ -- build-in-place library function, child unit or not.
if (Nkind (Nod) in N_Entity and then Is_Compilation_Unit (Nod))
or else
- (Nkind (Nod) = N_Defining_Program_Unit_Name
- and then Is_Compilation_Unit (Defining_Identifier (Nod)))
+ (Nkind_In (Nod,
+ N_Defining_Program_Unit_Name, N_Subprogram_Declaration)
+ and then Is_Compilation_Unit (Defining_Entity (Nod)))
then
Add_Global_Declaration (IR);
else
new file mode 100644
@@ -0,0 +1,10 @@
+-- { dg-do compile }
+
+with BIP_CU_T; use BIP_CU_T;
+with BIP_CU_Constructor;
+
+procedure BIP_CU is
+ Value : constant T := BIP_CU_Constructor;
+begin
+ null;
+end;
new file mode 100644
@@ -0,0 +1,5 @@
+with BIP_CU_T; use BIP_CU_T;
+function BIP_CU_Constructor return T is
+begin
+ return Make_T (Name => "Rumplestiltskin");
+end BIP_CU_Constructor;
new file mode 100644
@@ -0,0 +1,2 @@
+with BIP_CU_T; use BIP_CU_T;
+function BIP_CU_Constructor return T;
new file mode 100644
@@ -0,0 +1,8 @@
+package body BIP_CU_T is
+
+ function Make_T (Name : String) return T is
+ begin
+ return (Name => To_Unbounded_String (Name), others => <>);
+ end Make_T;
+
+end BIP_CU_T;
new file mode 100644
@@ -0,0 +1,10 @@
+with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+
+package BIP_CU_T is
+ type T is limited private;
+ function Make_T (Name : String) return T;
+private
+ type T is limited record
+ Name : Unbounded_String;
+ end record;
+end BIP_CU_T;