This patch disables the machinery associated with allocating objects on a user defined storage pool in build-in-place functions ZFP does not support pools.
Tested on x86_64-pc-linux-gnu, committed on trunk 2011-10-15 Bob Duff <d...@adacore.com> * exp_ch6.adb (Add_Unconstrained_Actuals_To_Build_In_Place_Call): Do not create a pool formal on unless RE_Root_Storage_Pool_Ptr is available. (Expand_N_Extended_Return_Statement): Do not create a renaming of the build-in-place pool parameter unless RE_Root_Storage_Pool_Ptr is available. (Make_Build_In_Place_Call_In_Allocator): Add the user-defined pool only if RE_Root_Storage_Pool_Ptr is available. (Make_Build_In_Place_Call_In_Object_Declaration): Do not add a pool actual unless RE_Root_Storage_Pool_Ptr is available. * sem_ch6.adb (Create_Extra_Formals): Add build-in-place pool formal only if RE_Root_Storage_Pool_Ptr is available.
Index: exp_ch6.adb =================================================================== --- exp_ch6.adb (revision 179986) +++ exp_ch6.adb (working copy) @@ -311,10 +311,12 @@ Add_Extra_Actual_To_Call (Function_Call, Alloc_Form_Formal, Alloc_Form_Actual); - -- Pass the Storage_Pool parameter. This parameter is omitted on .NET - -- and JVM as those targets do not support pools. + -- Pass the Storage_Pool parameter. This parameter is omitted + -- .NET/JVM/ZFP as those targets do not support pools. - if VM_Target = No_VM then + if + VM_Target = No_VM and then RTE_Available (RE_Root_Storage_Pool_Ptr) + then Pool_Formal := Build_In_Place_Formal (Function_Id, BIP_Storage_Pool); Analyze_And_Resolve (Pool_Actual, Etype (Pool_Formal)); Add_Extra_Actual_To_Call @@ -5241,10 +5243,12 @@ Pool_Allocator := New_Copy_Tree (Heap_Allocator); -- Do not generate the renaming of the build-in-place - -- pool parameter on .NET/JVM because the parameter is - -- not created in the first place. + -- pool parameter on .NET/JVM/ZFP because the parameter + -- is not created in the first place. - if VM_Target = No_VM then + if VM_Target = No_VM and then + RTE_Available (RE_Root_Storage_Pool_Ptr) + then Pool_Decl := Make_Object_Renaming_Declaration (Loc, Defining_Identifier => Pool_Id, @@ -8137,7 +8141,9 @@ -- has an unconstrained or tagged result type). if Needs_BIP_Alloc_Form (Enclosing_Func) then - if VM_Target = No_VM then + if VM_Target = No_VM and then + RTE_Available (RE_Root_Storage_Pool_Ptr) + then Pool_Actual := New_Reference_To (Build_In_Place_Formal (Enclosing_Func, BIP_Storage_Pool), Loc); Index: sem_ch6.adb =================================================================== --- sem_ch6.adb (revision 179986) +++ sem_ch6.adb (working copy) @@ -6487,10 +6487,12 @@ E, BIP_Formal_Suffix (BIP_Alloc_Form)); -- Add BIP_Storage_Pool, in case BIP_Alloc_Form indicates to - -- use a user-defined pool. This formal is not added on .NET - -- and JVM as those targets do not support pools. + -- use a user-defined pool. This formal is not added on + -- .NET/JVM/ZFP as those targets do not support pools. - if VM_Target = No_VM then + if VM_Target = No_VM and then + RTE_Available (RE_Root_Storage_Pool_Ptr) + then Discard := Add_Extra_Formal (E, RTE (RE_Root_Storage_Pool_Ptr),