From 535a86378ea5182125321ceede077e3781973f0a Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 16 Oct 2015 11:01:53 +0000 Subject: [PATCH] exp_ch5.adb, [...]: Code clean up: remove special handling for .NET and JVM. 2015-10-16 Arnaud Charlet * exp_ch5.adb, sem_ch3.adb, frontend.adb, exp_ch7.adb, exp_ch7.ads, sem_ch5.adb, sem_type.adb, exp_util.adb, exp_util.ads, comperr.adb, exp_attr.adb, sinfo.ads, exp_ch9.adb, make.adb, usage.adb, lib-writ.adb, sem_ch9.adb, bindgen.adb, debug.adb, einfo.adb, einfo.ads, types.ads, checks.adb, sem_prag.adb, s-tasini.adb, rtsfind.ads, freeze.adb, sem_util.adb, sem_util.ads, exp_dbug.adb, gnatlink.adb, gnat1drv.adb, targparm.adb, targparm.ads, exp_ch4.adb, exp_ch11.adb, repinfo.adb, s-soflin.adb, s-soflin.ads, exp_ch6.adb, exp_ch13.adb, sem_mech.adb, sem_ch6.adb, par-prag.adb, exp_disp.adb, sem_ch8.adb, exp_disp.ads, snames.adb-tmpl, exp_aggr.adb, sem_eval.adb, exp_intr.adb, sem_ch13.adb, snames.ads-tmpl, sem_disp.adb, exp_ch3.adb: Code clean up: remove special handling for .NET and JVM. From-SVN: r228874 --- gcc/ada/ChangeLog | 15 ++ gcc/ada/bindgen.adb | 400 +++++++--------------------- gcc/ada/checks.adb | 10 - gcc/ada/comperr.adb | 25 +- gcc/ada/debug.adb | 19 +- gcc/ada/einfo.adb | 12 - gcc/ada/einfo.ads | 25 +- gcc/ada/exp_aggr.adb | 18 +- gcc/ada/exp_attr.adb | 47 +--- gcc/ada/exp_ch11.adb | 54 +--- gcc/ada/exp_ch13.adb | 7 - gcc/ada/exp_ch3.adb | 210 +++++---------- gcc/ada/exp_ch4.adb | 167 +++--------- gcc/ada/exp_ch5.adb | 103 +------- gcc/ada/exp_ch6.adb | 142 +++------- gcc/ada/exp_ch7.adb | 209 ++++++--------- gcc/ada/exp_ch7.ads | 12 - gcc/ada/exp_ch9.adb | 81 ++---- gcc/ada/exp_dbug.adb | 9 - gcc/ada/exp_disp.adb | 565 ---------------------------------------- gcc/ada/exp_disp.ads | 4 - gcc/ada/exp_intr.adb | 12 +- gcc/ada/exp_util.adb | 42 +-- gcc/ada/exp_util.ads | 4 - gcc/ada/freeze.adb | 19 -- gcc/ada/frontend.adb | 10 +- gcc/ada/gnat1drv.adb | 19 +- gcc/ada/gnatlink.adb | 25 +- gcc/ada/lib-writ.adb | 11 +- gcc/ada/make.adb | 52 +--- gcc/ada/par-prag.adb | 3 - gcc/ada/repinfo.adb | 6 +- gcc/ada/rtsfind.ads | 4 - gcc/ada/s-soflin.adb | 11 +- gcc/ada/s-soflin.ads | 11 +- gcc/ada/s-tasini.adb | 52 +--- gcc/ada/sem_ch13.adb | 91 ++----- gcc/ada/sem_ch3.adb | 8 +- gcc/ada/sem_ch5.adb | 1 - gcc/ada/sem_ch6.adb | 17 +- gcc/ada/sem_ch8.adb | 16 +- gcc/ada/sem_ch9.adb | 7 - gcc/ada/sem_disp.adb | 7 +- gcc/ada/sem_eval.adb | 7 - gcc/ada/sem_mech.adb | 6 +- gcc/ada/sem_prag.adb | 451 ++------------------------------ gcc/ada/sem_type.adb | 12 - gcc/ada/sem_util.adb | 108 +------- gcc/ada/sem_util.ads | 16 -- gcc/ada/sinfo.ads | 8 +- gcc/ada/snames.adb-tmpl | 4 - gcc/ada/snames.ads-tmpl | 10 - gcc/ada/targparm.adb | 27 -- gcc/ada/targparm.ads | 7 - gcc/ada/types.ads | 5 +- gcc/ada/usage.adb | 6 +- 56 files changed, 470 insertions(+), 2759 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3c1f20746f6..c44a267a771 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2015-10-16 Arnaud Charlet + + * exp_ch5.adb, sem_ch3.adb, frontend.adb, exp_ch7.adb, exp_ch7.ads, + sem_ch5.adb, sem_type.adb, exp_util.adb, exp_util.ads, comperr.adb, + exp_attr.adb, sinfo.ads, exp_ch9.adb, make.adb, usage.adb, + lib-writ.adb, sem_ch9.adb, bindgen.adb, debug.adb, einfo.adb, + einfo.ads, types.ads, checks.adb, sem_prag.adb, s-tasini.adb, + rtsfind.ads, freeze.adb, sem_util.adb, sem_util.ads, exp_dbug.adb, + gnatlink.adb, gnat1drv.adb, targparm.adb, targparm.ads, exp_ch4.adb, + exp_ch11.adb, repinfo.adb, s-soflin.adb, s-soflin.ads, exp_ch6.adb, + exp_ch13.adb, sem_mech.adb, sem_ch6.adb, par-prag.adb, exp_disp.adb, + sem_ch8.adb, exp_disp.ads, snames.adb-tmpl, exp_aggr.adb, sem_eval.adb, + exp_intr.adb, sem_ch13.adb, snames.ads-tmpl, sem_disp.adb, exp_ch3.adb: + Code clean up: remove special handling for .NET and JVM. + 2015-10-16 Arnaud Charlet * sem_ch12.adb: Minor punctuation fix in comment diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 798db09dd40..76e9dc35346 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -352,13 +352,10 @@ package body Bindgen is -- characters of S. The caller must ensure that these characters do in fact -- exist in the Statement_Buffer. - type Qualification_Mode is (Dollar_Sign, Dot, Double_Underscores); - - procedure Set_Unit_Name (Mode : Qualification_Mode := Double_Underscores); + procedure Set_Unit_Name; -- Given a unit name in the Name_Buffer, copy it into Statement_Buffer, -- starting at the Last + 1 position and update Last past the value. - -- Depending on parameter Mode, a dot (.) can be qualified into double - -- underscores (__), a dollar sign ($) or left as is. + -- Each dot (.) will be qualified into double underscores (__). procedure Set_Unit_Number (U : Unit_Id); -- Sets unit number (first unit is 1, leading zeroes output to line up all @@ -380,10 +377,7 @@ package body Bindgen is begin WBI (" procedure " & Ada_Final_Name.all & " is"); - if VM_Target = No_VM - and Bind_Main_Program - and not CodePeer_Mode - then + if Bind_Main_Program and not CodePeer_Mode then WBI (" procedure s_stalib_adafinal;"); Set_String (" pragma Import (C, s_stalib_adafinal, "); Set_String ("""system__standard_library__adafinal"");"); @@ -406,10 +400,10 @@ package body Bindgen is WBI (" Runtime_Finalize;"); - -- On non-virtual machine targets, finalization is done differently - -- depending on whether this is the main program or a library. + -- By default (real targets), finalization is done differently depending + -- on whether this is the main program or a library. - if VM_Target = No_VM and then not CodePeer_Mode then + if not CodePeer_Mode then if Bind_Main_Program then WBI (" s_stalib_adafinal;"); elsif Lib_Final_Built then @@ -418,9 +412,9 @@ package body Bindgen is WBI (" null;"); end if; - -- Pragma Import C cannot be used on virtual machine targets, therefore - -- call the runtime finalization routine directly. Similarly in CodePeer - -- mode, where imported functions are ignored. + -- Pragma Import C cannot be used on virtual targets, therefore call the + -- runtime finalization routine directly in CodePeer mode, where + -- imported functions are ignored. else WBI (" System.Standard_Library.Adafinal;"); @@ -443,12 +437,11 @@ package body Bindgen is -- of __gnat_finalize_library_objects. This is declared at library -- level for compatibility with the type used in System.Soft_Links. -- The import of the soft link which performs library-level object - -- finalization is not needed for VM targets; regular Ada is used in + -- finalization does not work for CodePeer, so regular Ada is used in -- that case. For restricted run-time libraries (ZFP and Ravenscar) -- tasks are non-terminating, so we do not want finalization. if not Suppress_Standard_Library_On_Target - and then VM_Target = No_VM and then not CodePeer_Mode and then not Configurable_Run_Time_On_Target then @@ -638,12 +631,10 @@ package body Bindgen is " ""__gnat_activate_all_tasks"");"); end if; - -- The import of the soft link which performs library-level object - -- finalization is not needed for VM targets; regular Ada is used in - -- that case. For restricted run-time libraries (ZFP and Ravenscar) + -- For restricted run-time libraries (ZFP and Ravenscar) -- tasks are non-terminating, so we do not want finalization. - if VM_Target = No_VM and then not Configurable_Run_Time_On_Target then + if not Configurable_Run_Time_On_Target then WBI (""); WBI (" Finalize_Library_Objects : No_Param_Proc;"); WBI (" pragma Import (C, Finalize_Library_Objects, " & @@ -662,38 +653,6 @@ package body Bindgen is """__gnat_initialize_stack_limit"");"); end if; - -- Special processing when main program is CIL function/procedure - - if VM_Target = CLI_Target - and then Bind_Main_Program - and then not No_Main_Subprogram - then - WBI (""); - - -- Function case, use Set_Exit_Status to report the returned - -- status code, since that is the only mechanism available. - - if ALIs.Table (ALIs.First).Main_Program = Func then - WBI (" Result : Integer;"); - WBI (" procedure Set_Exit_Status (Code : Integer);"); - WBI (" pragma Import (C, Set_Exit_Status, " & - """__gnat_set_exit_status"");"); - WBI (""); - WBI (" function Ada_Main_Program return Integer;"); - - -- Procedure case - - else - WBI (" procedure Ada_Main_Program;"); - end if; - - Get_Name_String (Units.Table (First_Unit_Entry).Uname); - Name_Len := Name_Len - 2; - WBI (" pragma Import (CIL, Ada_Main_Program, """ - & Name_Buffer (1 .. Name_Len) & "." - & Get_Main_Unit_Name (Name_Buffer (1 .. Name_Len)) & """);"); - end if; - -- When dispatching domains are used then we need to signal it -- before calling the main procedure. @@ -836,18 +795,8 @@ package body Bindgen is -- Generate call to Install_Handler - -- In .NET, when binding with -z, we don't install the signal handler - -- to let the caller handle the last exception handler. - WBI (""); - - if VM_Target /= CLI_Target - or else Bind_Main_Program - then - WBI (" Runtime_Initialize (1);"); - else - WBI (" Runtime_Initialize (0);"); - end if; + WBI (" Runtime_Initialize (1);"); end if; -- Generate call to set Initialize_Scalar values if active @@ -888,37 +837,22 @@ package body Bindgen is if CodePeer_Mode then null; - -- On virtual machine targets, or on non-virtual machine ones if this - -- is the main program case, attach finalize_library to the soft link. - -- Do it only when not using a restricted run time, in which case tasks - -- are non-terminating, so we do not want library-level finalization. + -- If this is the main program case, attach finalize_library to the soft + -- link. Do it only when not using a restricted run time, in which case + -- tasks are non-terminating, so we do not want library-level + -- finalization. - elsif (VM_Target /= No_VM or else Bind_Main_Program) + elsif Bind_Main_Program and then not Configurable_Run_Time_On_Target and then not Suppress_Standard_Library_On_Target then WBI (""); - if VM_Target = No_VM then - if Lib_Final_Built then - Set_String (" Finalize_Library_Objects := "); - Set_String ("finalize_library'access;"); - else - Set_String (" Finalize_Library_Objects := null;"); - end if; - - -- On VM targets use regular Ada to set the soft link - + if Lib_Final_Built then + Set_String (" Finalize_Library_Objects := "); + Set_String ("finalize_library'access;"); else - if Lib_Final_Built then - Set_String - (" System.Soft_Links.Finalize_Library_Objects"); - Set_String (" := finalize_library'access;"); - else - Set_String - (" System.Soft_Links.Finalize_Library_Objects"); - Set_String (" := null;"); - end if; + Set_String (" Finalize_Library_Objects := null;"); end if; Write_Statement_Buffer; @@ -959,25 +893,6 @@ package body Bindgen is end if; end if; - -- Case of main program is CIL function or procedure - - if VM_Target = CLI_Target - and then Bind_Main_Program - and then not No_Main_Subprogram - then - -- For function case, use Set_Exit_Status to set result - - if ALIs.Table (ALIs.First).Main_Program = Func then - WBI (" Result := Ada_Main_Program;"); - WBI (" Set_Exit_Status (Result);"); - - -- Procedure case - - else - WBI (" Ada_Main_Program;"); - end if; - end if; - WBI (" end " & Ada_Init_Name.all & ";"); WBI (""); end Gen_Adainit; @@ -1188,37 +1103,24 @@ package body Bindgen is Set_String (" "); Get_Decoded_Name_String_With_Brackets (U.Uname); - if VM_Target = CLI_Target and then U.Unit_Kind /= 's' then - if Name_Buffer (Name_Len) = 's' then - Name_Buffer (Name_Len - 1 .. Name_Len + 12) := - "_pkg'elab_spec"; - else - Name_Buffer (Name_Len - 1 .. Name_Len + 12) := - "_pkg'elab_body"; - end if; - - Name_Len := Name_Len + 12; - - else - if Name_Buffer (Name_Len) = 's' then - Name_Buffer (Name_Len - 1 .. Name_Len + 8) := - "'elab_spec"; - Name_Len := Name_Len + 8; + if Name_Buffer (Name_Len) = 's' then + Name_Buffer (Name_Len - 1 .. Name_Len + 8) := + "'elab_spec"; + Name_Len := Name_Len + 8; - -- Special case in CodePeer mode for subprogram bodies - -- which correspond to CodePeer 'Elab_Subp_Body special - -- init procedure. + -- Special case in CodePeer mode for subprogram bodies + -- which correspond to CodePeer 'Elab_Subp_Body special + -- init procedure. - elsif U.Unit_Kind = 's' and CodePeer_Mode then - Name_Buffer (Name_Len - 1 .. Name_Len + 13) := - "'elab_subp_body"; - Name_Len := Name_Len + 13; + elsif U.Unit_Kind = 's' and CodePeer_Mode then + Name_Buffer (Name_Len - 1 .. Name_Len + 13) := + "'elab_subp_body"; + Name_Len := Name_Len + 13; - else - Name_Buffer (Name_Len - 1 .. Name_Len + 8) := - "'elab_body"; - Name_Len := Name_Len + 8; - end if; + else + Name_Buffer (Name_Len - 1 .. Name_Len + 8) := + "'elab_body"; + Name_Len := Name_Len + 8; end if; Set_Casing (U.Icasing); @@ -1294,51 +1196,10 @@ package body Bindgen is Set_String (" "); Set_String ("E"); Set_Unit_Number (Unum); - - case VM_Target is - when No_VM | JVM_Target => - Set_String (" : Short_Integer; pragma Import (Ada, "); - when CLI_Target => - Set_String (" : Short_Integer; pragma Import (CIL, "); - end case; - - Set_String ("E"); + Set_String (" : Short_Integer; pragma Import (Ada, E"); Set_Unit_Number (Unum); Set_String (", """); Get_Name_String (U.Uname); - - -- In the case of JGNAT we need to emit an Import name that - -- includes the class name (using '$' separators in the case - -- of a child unit name). - - if VM_Target /= No_VM then - for J in 1 .. Name_Len - 2 loop - if VM_Target = CLI_Target - or else Name_Buffer (J) /= '.' - then - Set_Char (Name_Buffer (J)); - else - Set_String ("$"); - end if; - end loop; - - if VM_Target /= CLI_Target or else U.Unit_Kind = 's' then - Set_String ("."); - else - Set_String ("_pkg."); - end if; - - -- If the unit name is very long, then split the - -- Import link name across lines using "&" (occurs - -- in some C2 tests). - - if 2 * Name_Len + 60 > Hostparm.Max_Line_Length then - Set_String (""" &"); - Write_Statement_Buffer; - Set_String (" """); - end if; - end if; - Set_Unit_Name; Set_String ("_E"");"); Write_Statement_Buffer; @@ -1467,46 +1328,15 @@ package body Bindgen is Write_Statement_Buffer; -- Generate: - -- pragma Import (CIL, F, - -- "xx.yy_pkg.xx__yy__finalize_[body|spec]"); - -- -- for .NET targets - - -- pragma Import (Java, F, - -- "xx$yy.xx__yy__finalize_[body|spec]"); - -- -- for JVM targets - -- pragma Import (Ada, F, -- "xx__yy__finalize_[body|spec]"); - -- -- for default targets - - if VM_Target = CLI_Target then - Set_String (" pragma Import (CIL, F"); - elsif VM_Target = JVM_Target then - Set_String (" pragma Import (Java, F"); - else - Set_String (" pragma Import (Ada, F"); - end if; + Set_String (" pragma Import (Ada, F"); Set_Int (Count); Set_String (", """); -- Perform name construction - -- .NET xx.yy_pkg.xx__yy__finalize - - if VM_Target = CLI_Target then - Set_Unit_Name (Mode => Dot); - Set_String ("_pkg."); - - -- JVM xx$yy.xx__yy__finalize - - elsif VM_Target = JVM_Target then - Set_Unit_Name (Mode => Dollar_Sign); - Set_Char ('.'); - end if; - - -- Default xx__yy__finalize - Set_Unit_Name; Set_String ("__finalize_"); @@ -1586,31 +1416,17 @@ package body Bindgen is -- raised an exception. In that case import the actual exception -- and the routine necessary to raise it. - if VM_Target = No_VM then - WBI (" declare"); - WBI (" procedure Reraise_Library_Exception_If_Any;"); - - Set_String (" pragma Import (Ada, "); - Set_String ("Reraise_Library_Exception_If_Any, "); - Set_String ("""__gnat_reraise_library_exception_if_any"");"); - Write_Statement_Buffer; - - WBI (" begin"); - WBI (" Reraise_Library_Exception_If_Any;"); - WBI (" end;"); - - -- VM-specific code, use regular Ada to produce the desired behavior + WBI (" declare"); + WBI (" procedure Reraise_Library_Exception_If_Any;"); - else - WBI (" if System.Soft_Links.Library_Exception_Set then"); - - Set_String (" Ada.Exceptions.Reraise_Occurrence ("); - Set_String ("System.Soft_Links.Library_Exception);"); - Write_Statement_Buffer; - - WBI (" end if;"); - end if; + Set_String (" pragma Import (Ada, "); + Set_String ("Reraise_Library_Exception_If_Any, "); + Set_String ("""__gnat_reraise_library_exception_if_any"");"); + Write_Statement_Buffer; + WBI (" begin"); + WBI (" Reraise_Library_Exception_If_Any;"); + WBI (" end;"); WBI (" end finalize_library;"); WBI (""); end if; @@ -1980,18 +1796,16 @@ package body Bindgen is -- Add a "-Ldir" for each directory in the object path - if VM_Target /= CLI_Target then - for J in 1 .. Nb_Dir_In_Obj_Search_Path loop - declare - Dir : constant String_Ptr := Dir_In_Obj_Search_Path (J); - begin - Name_Len := 0; - Add_Str_To_Name_Buffer ("-L"); - Add_Str_To_Name_Buffer (Dir.all); - Write_Linker_Option; - end; - end loop; - end if; + for J in 1 .. Nb_Dir_In_Obj_Search_Path loop + declare + Dir : constant String_Ptr := Dir_In_Obj_Search_Path (J); + begin + Name_Len := 0; + Add_Str_To_Name_Buffer ("-L"); + Add_Str_To_Name_Buffer (Dir.all); + Write_Linker_Option; + end; + end loop; if not (Opt.No_Run_Time_Mode or Opt.No_Stdlib) then Name_Len := 0; @@ -2117,12 +1931,6 @@ package body Bindgen is Set_PSD_Pragma_Table; - -- For JGNAT the main program is already generated by the compiler - - if VM_Target = JVM_Target then - Bind_Main_Program := False; - end if; - -- Override time slice value if -T switch is set if Time_Slice_Set then @@ -2219,9 +2027,6 @@ package body Bindgen is if not Suppress_Standard_Library_On_Target then if CodePeer_Mode then WBI ("with System.Standard_Library;"); - elsif VM_Target /= No_VM then - WBI ("with System.Soft_Links;"); - WBI ("with System.Standard_Library;"); end if; end if; @@ -2231,45 +2036,42 @@ package body Bindgen is -- Main program case if Bind_Main_Program then - if VM_Target = No_VM then + -- Generate argc/argv stuff unless suppressed - -- Generate argc/argv stuff unless suppressed + if Command_Line_Args_On_Target + or not Configurable_Run_Time_On_Target + then + WBI (""); + WBI (" gnat_argc : Integer;"); + WBI (" gnat_argv : System.Address;"); + WBI (" gnat_envp : System.Address;"); - if Command_Line_Args_On_Target - or not Configurable_Run_Time_On_Target - then + -- If the standard library is not suppressed, these variables + -- are in the run-time data area for easy run time access. + + if not Suppress_Standard_Library_On_Target then WBI (""); - WBI (" gnat_argc : Integer;"); - WBI (" gnat_argv : System.Address;"); - WBI (" gnat_envp : System.Address;"); - - -- If the standard library is not suppressed, these variables - -- are in the run-time data area for easy run time access. - - if not Suppress_Standard_Library_On_Target then - WBI (""); - WBI (" pragma Import (C, gnat_argc);"); - WBI (" pragma Import (C, gnat_argv);"); - WBI (" pragma Import (C, gnat_envp);"); - end if; + WBI (" pragma Import (C, gnat_argc);"); + WBI (" pragma Import (C, gnat_argv);"); + WBI (" pragma Import (C, gnat_envp);"); end if; + end if; - -- Define exit status. Again in normal mode, this is in the - -- run-time library, and is initialized there, but in the - -- configurable runtime case, the variable is declared and - -- initialized in this file. - - WBI (""); + -- Define exit status. Again in normal mode, this is in the + -- run-time library, and is initialized there, but in the + -- configurable runtime case, the variable is declared and + -- initialized in this file. - if Configurable_Run_Time_Mode then - if Exit_Status_Supported_On_Target then - WBI (" gnat_exit_status : Integer := 0;"); - end if; + WBI (""); - else - WBI (" gnat_exit_status : Integer;"); - WBI (" pragma Import (C, gnat_exit_status);"); + if Configurable_Run_Time_Mode then + if Exit_Status_Supported_On_Target then + WBI (" gnat_exit_status : Integer := 0;"); end if; + + else + WBI (" gnat_exit_status : Integer;"); + WBI (" pragma Import (C, gnat_exit_status);"); end if; -- Generate the GNAT_Version and Ada_Main_Program_Name info only for @@ -2289,12 +2091,8 @@ package body Bindgen is Set_String (" Ada_Main_Program_Name : constant String := """); Get_Name_String (Units.Table (First_Unit_Entry).Uname); - if VM_Target = No_VM then - Set_Main_Program_Name; - Set_String (""" & ASCII.NUL;"); - else - Set_String (Name_Buffer (1 .. Name_Len - 2) & """;"); - end if; + Set_Main_Program_Name; + Set_String (""" & ASCII.NUL;"); Write_Statement_Buffer; @@ -2326,7 +2124,7 @@ package body Bindgen is end if; end if; - if Bind_Main_Program and then VM_Target = No_VM then + if Bind_Main_Program then WBI (""); @@ -2505,7 +2303,7 @@ package body Bindgen is Gen_Adainit; - if Bind_Main_Program and then VM_Target = No_VM then + if Bind_Main_Program then Gen_Main; end if; @@ -2706,17 +2504,11 @@ package body Bindgen is Nlen : Natural; begin - -- The main program generated by JGNAT expects a package called - -- ada_
. - if VM_Target /= No_VM then - Get_Name_String (Units.Table (First_Unit_Entry).Uname); - return "ada_" & Get_Main_Unit_Name (Name_Buffer (1 .. Name_Len - 2)); - end if; - -- For CodePeer, we want reproducible names (independent of other -- mains that may or may not be present) that don't collide -- when analyzing multiple mains and which are easily recognizable -- as "ada_main" names. + if CodePeer_Mode then Get_Name_String (Units.Table (First_Unit_Entry).Uname); return "ada_main_for_" & @@ -3122,17 +2914,11 @@ package body Bindgen is -- Set_Unit_Name -- ------------------- - procedure Set_Unit_Name (Mode : Qualification_Mode := Double_Underscores) is + procedure Set_Unit_Name is begin for J in 1 .. Name_Len - 2 loop if Name_Buffer (J) = '.' then - if Mode = Double_Underscores then - Set_String ("__"); - elsif Mode = Dot then - Set_Char ('.'); - else - Set_Char ('$'); - end if; + Set_String ("__"); else Set_Char (Name_Buffer (J)); end if; diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index b2e779c99e6..929bdc535d9 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -1037,17 +1037,12 @@ package body Checks is -- operation on signed integers on which the expander can promote -- later the operands to type Integer (see Expand_N_Type_Conversion). - -- Special case CLI target, where arithmetic overflow checks can be - -- performed for integer and long_integer - if Backend_Overflow_Checks_On_Target or else not Do_Overflow_Check (N) or else not Expander_Active or else (Present (Parent (N)) and then Nkind (Parent (N)) = N_Type_Conversion and then Integer_Promotion_Possible (Parent (N))) - or else - (VM_Target = CLI_Target and then Siz >= Standard_Integer_Size) then return; end if; @@ -5903,11 +5898,6 @@ package body Checks is elsif Nkind_In (Expr, N_Integer_Literal, N_Character_Literal) then return True; - -- Real literals are assumed to be valid in VM targets - - elsif VM_Target /= No_VM and then Nkind (Expr) = N_Real_Literal then - return True; - -- If we have a type conversion or a qualification of a known valid -- value, then the result will always be valid. diff --git a/gcc/ada/comperr.adb b/gcc/ada/comperr.adb index cabc028417b..f32db3267b8 100644 --- a/gcc/ada/comperr.adb +++ b/gcc/ada/comperr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,7 +40,6 @@ with Sinfo; use Sinfo; with Sinput; use Sinput; with Sprint; use Sprint; with Sdefault; use Sdefault; -with Targparm; use Targparm; with Treepr; use Treepr; with Types; use Types; @@ -116,35 +115,19 @@ package body Comperr is Abort_In_Progress := True; -- Generate a "standard" error message instead of a bug box in case - -- of .NET compiler, since we do not support all constructs of the - -- language. Of course ideally, we should detect this before bombing on - -- e.g. an assertion error, but in practice most of these bombs are due - -- to a legitimate case of a construct not being supported (in a sense - -- they all are, since for sure we are not supporting something if we - -- bomb). By giving this message, we provide a more reasonable practical - -- interface, since giving scary bug boxes on unsupported features is - -- definitely not helpful. - - -- Similarly if we are generating SCIL, an error message is sufficient - -- instead of generating a bug box. + -- of CodePeer rather than generating a bug box, friendlier. -- Note that the call to Error_Msg_N below sets Serious_Errors_Detected -- to 1, so we use the regular mechanism below in order to display a -- "compilation abandoned" message and exit, so we still know we have -- this case (and -gnatdk can still be used to get the bug box). - if (VM_Target = CLI_Target or else CodePeer_Mode) + if CodePeer_Mode and then Serious_Errors_Detected = 0 and then not Debug_Flag_K and then Sloc (Current_Error_Node) > No_Location then - if VM_Target = CLI_Target then - Error_Msg_N - ("unsupported construct in this context", - Current_Error_Node); - else - Error_Msg_N ("cannot generate 'S'C'I'L", Current_Error_Node); - end if; + Error_Msg_N ("cannot generate 'S'C'I'L", Current_Error_Node); end if; -- If we are in CodePeer mode, we must also delete SCIL files diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index 7f70bfa0217..60c06f62bab 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -105,8 +105,8 @@ package body Debug is -- d.l Use Ada 95 semantics for limited function returns -- d.m For -gnatl, print full source only for main unit -- d.n Print source file names - -- d.o Generate .NET listing of CIL code - -- d.p Enable the .NET CIL verifier + -- d.o + -- d.p -- d.q -- d.r Enable OK_To_Reorder_Components in non-variant records -- d.s Disable expansion of slice move, use memmove @@ -560,13 +560,6 @@ package body Debug is -- compiler has a bug -- these are the files that need to be included -- in a bug report. - -- d.o Generate listing showing the IL instructions generated by the .NET - -- compiler for each subprogram. - - -- d.p Enable the .NET CIL verifier. During development the verifier is - -- disabled by default and this flag is used to enable it. In the - -- future we will reverse this functionality. - -- d.r Forces the flag OK_To_Reorder_Components to be set in all record -- base types that have no discriminants. @@ -597,10 +590,10 @@ package body Debug is -- d.z Restore previous front-end support for Inline_Always. In default -- mode, for targets that use the GCC back end (i.e. currently all - -- targets except AAMP, .NET, JVM, and GNATprove), Inline_Always is - -- handled by the back end. Use of this switch restores the previous - -- handling of Inline_Always by the front end on such targets. For the - -- targets that do not use the GCC back end, this switch is ignored. + -- targets except AAMP and GNATprove), Inline_Always is handled by the + -- back end. Use of this switch restores the previous handling of + -- Inline_Always by the front end on such targets. For the targets + -- that do not use the GCC back end, this switch is ignored. -- d.A There seems to be a problem with ASIS if we activate the circuit -- for reading and writing the aspect specification hash table, so diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb index eb57b6996d8..6dd5c96abc2 100644 --- a/gcc/ada/einfo.adb +++ b/gcc/ada/einfo.adb @@ -516,7 +516,6 @@ package body Einfo is -- Has_Pragma_Unreferenced_Objects Flag212 -- Requires_Overriding Flag213 -- Has_RACW Flag214 - -- Has_Uplevel_Reference Flag215 -- Universal_Aliasing Flag216 -- Suppress_Value_Tracking_On_Call Flag217 -- Is_Primitive Flag218 @@ -1847,11 +1846,6 @@ package body Einfo is return Flag72 (Id); end Has_Unknown_Discriminants; - function Has_Uplevel_Reference (Id : E) return B is - begin - return Flag215 (Id); - end Has_Uplevel_Reference; - function Has_Visible_Refinement (Id : E) return B is begin pragma Assert (Ekind (Id) = E_Abstract_State); @@ -4756,11 +4750,6 @@ package body Einfo is Set_Flag72 (Id, V); end Set_Has_Unknown_Discriminants; - procedure Set_Has_Uplevel_Reference (Id : E; V : B := True) is - begin - Set_Flag215 (Id, V); - end Set_Has_Uplevel_Reference; - procedure Set_Has_Visible_Refinement (Id : E; V : B := True) is begin pragma Assert (Ekind (Id) = E_Abstract_State); @@ -8770,7 +8759,6 @@ package body Einfo is W ("Has_Thunks", Flag228 (Id)); W ("Has_Unchecked_Union", Flag123 (Id)); W ("Has_Unknown_Discriminants", Flag72 (Id)); - W ("Has_Uplevel_Reference", Flag215 (Id)); W ("Has_Visible_Refinement", Flag263 (Id)); W ("Has_Volatile_Components", Flag87 (Id)); W ("Has_Xref_Entry", Flag182 (Id)); diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 49d26fb5078..9f291909431 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -2029,15 +2029,6 @@ package Einfo is -- on the partial view, to insure that discriminants are properly -- inherited in certain contexts. --- Has_Uplevel_Reference (Flag215) --- Defined in all entities. Indicates that the entity is locally defined --- within a subprogram P, and there is a reference to the entity within --- a subprogram nested within P (at any depth). Set only for the VM case --- (where it is set for variables, constants, and loop parameters). Note --- that this is similar in usage to Is_Uplevel_Referenced_Entity (which --- is used when we are unnesting subprograms), but the usages are a bit --- different and it is cleaner to leave the old VM usage unchanged. - -- Has_Visible_Refinement (Flag263) -- Defined in E_Abstract_State entities. Set when a state has at least -- one refinement constituent and analysis is in the region between @@ -2425,7 +2416,7 @@ package Einfo is -- Defined in all entities. Set if the entity is exported. For now we -- only allow the export of constants, exceptions, functions, procedures -- and variables, but that may well change later on. Exceptions can only --- be exported in the Java VM implementation of GNAT. +-- be exported in the Java VM implementation of GNAT, which is retired. -- Is_External_State (synthesized) -- Applies to all entities, true for abstract states that are subject to @@ -2549,7 +2540,7 @@ package Einfo is -- Defined in all entities. Set if the entity is imported. For now we -- only allow the import of exceptions, functions, procedures, packages. -- and variables. Exceptions, packages and types can only be imported in --- the Java VM implementation. +-- the Java VM implementation, which is retired. -- Is_Incomplete_Or_Private_Type (synthesized) -- Applies to all entities, true for private and incomplete types @@ -3035,9 +3026,7 @@ package Einfo is -- static bounds, a record all of whose component types are static types, -- or an array, all of whose bounds are of a static type, and also have -- a component type that is a static type). See Set_Uplevel_Type for more --- information on how this flag is used. Note that if Is_Static_Type is --- True, then it is never the case that the Has_Uplevel_Reference flag is --- set for the same type. +-- information on how this flag is used. -- Is_Statically_Allocated (Flag28) -- Defined in all entities. This can only be set for exception, @@ -3162,10 +3151,6 @@ package Einfo is -- the cases where the reference is implicit (e.g. the type of an array -- used for computing the location of an element in an array. This is -- used internally in Exp_Unst, see this package for further details. --- Note that this is similar to the Has_Uplevel_Reference flag which --- is used in the VM case but we prefer to keep the two cases entirely --- separated, so that the VM usage is not disturbed by work on the --- Unnesting_Subprograms mode. -- Is_Valued_Procedure (Flag127) -- Defined in procedure entities. Set if an Import_Valued_Procedure @@ -5311,7 +5296,6 @@ package Einfo is -- Has_Qualified_Name (Flag161) -- Has_Stream_Size_Clause (Flag184) -- Has_Unknown_Discriminants (Flag72) - -- Has_Uplevel_Reference (Flag215) -- Has_Xref_Entry (Flag182) -- In_Private_Part (Flag45) -- Is_Ada_2005_Only (Flag185) @@ -6868,7 +6852,6 @@ package Einfo is function Has_Thunks (Id : E) return B; function Has_Unchecked_Union (Id : E) return B; function Has_Unknown_Discriminants (Id : E) return B; - function Has_Uplevel_Reference (Id : E) return B; function Has_Visible_Refinement (Id : E) return B; function Has_Volatile_Components (Id : E) return B; function Has_Xref_Entry (Id : E) return B; @@ -7524,7 +7507,6 @@ package Einfo is procedure Set_Has_Thunks (Id : E; V : B := True); procedure Set_Has_Unchecked_Union (Id : E; V : B := True); procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True); - procedure Set_Has_Uplevel_Reference (Id : E; V : B := True); procedure Set_Has_Visible_Refinement (Id : E; V : B := True); procedure Set_Has_Volatile_Components (Id : E; V : B := True); procedure Set_Has_Xref_Entry (Id : E; V : B := True); @@ -8299,7 +8281,6 @@ package Einfo is pragma Inline (Has_Thunks); pragma Inline (Has_Unchecked_Union); pragma Inline (Has_Unknown_Discriminants); - pragma Inline (Has_Uplevel_Reference); pragma Inline (Has_Visible_Refinement); pragma Inline (Has_Volatile_Components); pragma Inline (Has_Xref_Entry); diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 6cdd290bd9e..cbb15811075 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -664,16 +664,6 @@ package body Exp_Aggr is return False; end if; - -- Checks 11: Array aggregates with aliased components are currently - -- not well supported by the VM backend; disable temporarily this - -- backend processing until it is definitely supported. - - if VM_Target /= No_VM - and then Has_Aliased_Components (Base_Type (Typ)) - then - return False; - end if; - -- Backend processing is possible Set_Size_Known_At_Compile_Time (Etype (N), True); @@ -2534,8 +2524,8 @@ package body Exp_Aggr is Set_No_Ctrl_Actions (First (Assign)); -- Assign the tag now to make sure that the dispatching call in - -- the subsequent deep_adjust works properly (unless VM_Target, - -- where tags are implicit). + -- the subsequent deep_adjust works properly (unless + -- Tagged_Type_Expansion where tags are implicit). if Tagged_Type_Expansion then Instr := @@ -5475,7 +5465,6 @@ package body Exp_Aggr is -- then we could go into an infinite recursion. if (In_Place_Assign_OK_For_Declaration or else Maybe_In_Place_OK) - and then VM_Target = No_VM and then not AAMP_On_Target and then not Generate_SCIL and then not Possible_Bit_Aligned_Component (Target) @@ -5851,7 +5840,8 @@ package body Exp_Aggr is -- These are cases where the source expression may have a tag that -- could differ from the component tag (e.g., can occur for type -- conversions and formal parameters). (Tag adjustment not needed - -- if VM_Target because object tags are implicit in the machine.) + -- if Tagged_Type_Expansion because object tags are implicit in + -- the machine.) if Is_Tagged_Type (Etype (Expr_Q)) and then (Nkind (Expr_Q) = N_Type_Conversion diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index bc85ea3485d..ed10ccda8f1 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -2223,14 +2223,7 @@ package body Exp_Attr is Prefix => Pref, Attribute_Name => Name_Tag); - if VM_Target = No_VM then - New_Node := Build_Get_Alignment (Loc, New_Node); - else - New_Node := - Make_Function_Call (Loc, - Name => New_Occurrence_Of (RTE (RE_Get_Alignment), Loc), - Parameter_Associations => New_List (New_Node)); - end if; + New_Node := Build_Get_Alignment (Loc, New_Node); -- Case where the context is a specific integer type with which -- the original attribute was compatible. The function has a @@ -2901,17 +2894,8 @@ package body Exp_Attr is begin if Nkind (Nod) = N_Selected_Component then Make_Elab_String (Prefix (Nod)); - - case VM_Target is - when JVM_Target => - Store_String_Char ('$'); - when CLI_Target => - Store_String_Char ('.'); - when No_VM => - Store_String_Char ('_'); - Store_String_Char ('_'); - end case; - + Store_String_Char ('_'); + Store_String_Char ('_'); Get_Name_String (Chars (Selector_Name (Nod))); else @@ -2930,14 +2914,8 @@ package body Exp_Attr is Start_String; Make_Elab_String (Pref); - - if VM_Target = No_VM then - Store_String_Chars ("___elab"); - Lang := Make_Identifier (Loc, Name_C); - else - Store_String_Chars ("._elab"); - Lang := Make_Identifier (Loc, Name_Ada); - end if; + Store_String_Chars ("___elab"); + Lang := Make_Identifier (Loc, Name_C); if Id = Attribute_Elab_Body then Store_String_Char ('b'); @@ -4189,11 +4167,7 @@ package body Exp_Attr is -- are not part of the actual type. Transform the attribute reference -- into a runtime expression to add the size of the hidden header. - -- Do not perform this expansion on .NET/JVM targets because the - -- two pointers are already present in the type. - - if VM_Target = No_VM - and then Needs_Finalization (Ptyp) + if Needs_Finalization (Ptyp) and then not Header_Size_Added (Attr) then Set_Header_Size_Added (Attr); @@ -7554,9 +7528,6 @@ package body Exp_Attr is -- that appear in GNAT's library, but will generate calls via rtsfind -- to library routines for user code. - -- ??? For now, disable this code for JVM, since this generates a - -- VerifyError exception at run time on e.g. c330001. - -- This is disabled for AAMP, to avoid creating dependences on files not -- supported in the AAMP library (such as s-fileio.adb). @@ -7567,8 +7538,7 @@ package body Exp_Attr is -- instead. That is why we include the test Is_Available when dealing -- with these cases. - if VM_Target /= JVM_Target - and then not AAMP_On_Target + if not AAMP_On_Target and then not Is_Predefined_File_Name (Unit_File_Name (Current_Sem_Unit)) then @@ -8044,8 +8014,7 @@ package body Exp_Attr is function Is_GCC_Target return Boolean is begin - return VM_Target = No_VM and then not CodePeer_Mode - and then not AAMP_On_Target; + return not CodePeer_Mode and then not AAMP_On_Target; end Is_GCC_Target; -- Start of processing for Exp_Attr diff --git a/gcc/ada/exp_ch11.adb b/gcc/ada/exp_ch11.adb index 6ffc8a02f50..798704502f9 100644 --- a/gcc/ada/exp_ch11.adb +++ b/gcc/ada/exp_ch11.adb @@ -1094,33 +1094,14 @@ package body Exp_Ch11 is end; end if; - -- The processing at this point is rather different for the JVM - -- case, so we completely separate the processing. - - -- For the VM case, we unconditionally call Update_Exception, - -- passing a call to the intrinsic Current_Target_Exception - -- (see JVM/.NET versions of Ada.Exceptions for details). - - if VM_Target /= No_VM then - declare - Arg : constant Node_Id := - Make_Function_Call (Loc, - Name => - New_Occurrence_Of - (RTE (RE_Current_Target_Exception), Loc)); - begin - Prepend_Call_To_Handler - (RE_Update_Exception, New_List (Arg)); - end; - - -- For the normal case, we have to worry about the state of - -- abort deferral. Generally, we defer abort during runtime - -- handling of exceptions. When control is passed to the - -- handler, then in the normal case we undefer aborts. In - -- any case this entire handling is relevant only if aborts - -- are allowed. - - elsif Abort_Allowed + -- For the normal case, we have to worry about the state of + -- abort deferral. Generally, we defer abort during runtime + -- handling of exceptions. When control is passed to the + -- handler, then in the normal case we undefer aborts. In + -- any case this entire handling is relevant only if aborts + -- are allowed. + + if Abort_Allowed and then Exception_Mechanism /= Back_End_Exceptions then -- There are some special cases in which we do not do the @@ -1269,14 +1250,6 @@ package body Exp_Ch11 is -- Start of processing for Expand_N_Exception_Declaration begin - -- There is no expansion needed when compiling for the JVM since the - -- JVM has a built-in exception mechanism. See cil/gnatlib/a-except.ads - -- for details. - - if VM_Target /= No_VM then - return; - end if; - -- Definition of the external name: nam : constant String := "A.B.NAME"; Ex_Id := @@ -1726,13 +1699,12 @@ package body Exp_Ch11 is else -- Bypass expansion to a run-time call when back-end exception - -- handling is active, unless the target is a VM, CodePeer or - -- GNATprove. In CodePeer, raising an exception is treated as an - -- error, while in GNATprove all code with exceptions falls outside - -- the subset of code which can be formally analyzed. + -- handling is active, unless the target is CodePeer or GNATprove. + -- In CodePeer, raising an exception is treated as an error, while in + -- GNATprove all code with exceptions falls outside the subset of + -- code which can be formally analyzed. - if VM_Target = No_VM - and then not CodePeer_Mode + if not CodePeer_Mode and then Exception_Mechanism = Back_End_Exceptions then return; diff --git a/gcc/ada/exp_ch13.adb b/gcc/ada/exp_ch13.adb index 65fa3238a49..6fd7dedfcae 100644 --- a/gcc/ada/exp_ch13.adb +++ b/gcc/ada/exp_ch13.adb @@ -47,7 +47,6 @@ with Sem_Eval; use Sem_Eval; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; with Snames; use Snames; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; with Validsw; use Validsw; @@ -291,12 +290,6 @@ package body Exp_Ch13 is if Restriction_Active (No_Finalization) then return; - - -- Do not create a specialized Deallocate since .NET/JVM compilers do - -- not support pools and address arithmetic. - - elsif VM_Target /= No_VM then - return; end if; -- Use the base type to perform the check for finalization master diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 8574ba0fd46..8f8b6d741b2 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -671,14 +671,9 @@ package body Exp_Ch3 is -- Nothing to generate in the following cases: -- 1. Initialization is suppressed for the type - -- 2. The type is a value type, in the CIL sense. - -- 3. The type has CIL/JVM convention. - -- 4. An initialization already exists for the base type + -- 2. An initialization already exists for the base type if Initialization_Suppressed (A_Type) - or else Is_Value_Type (Comp_Type) - or else Convention (A_Type) = Convention_CIL - or else Convention (A_Type) = Convention_Java or else Present (Base_Init_Proc (A_Type)) then return; @@ -1480,13 +1475,8 @@ package body Exp_Ch3 is -- Nothing to do if the Init_Proc is null, unless Initialize_Scalars -- is active (in which case we make the call anyway, since in the -- actual compiled client it may be non null). - -- Also nothing to do for value types. - if (Is_Null_Init_Proc (Proc) and then not Init_Or_Norm_Scalars) - or else Is_Value_Type (Typ) - or else - (Is_Array_Type (Typ) and then Is_Value_Type (Component_Type (Typ))) - then + if Is_Null_Init_Proc (Proc) and then not Init_Or_Norm_Scalars then return Empty_List; end if; @@ -1861,8 +1851,8 @@ package body Exp_Ch3 is Set_No_Ctrl_Actions (First (Res)); -- Adjust the tag if tagged (because of possible view conversions). - -- Suppress the tag adjustment when VM_Target because VM tags are - -- represented implicitly in objects. + -- Suppress the tag adjustment when not Tagged_Type_Expansion because + -- tags are represented implicitly in objects. if Is_Tagged_Type (Typ) and then Tagged_Type_Expansion then Append_To (Res, @@ -2174,8 +2164,8 @@ package body Exp_Ch3 is begin -- Offset_To_Top_Functions are built only for derivations of types -- with discriminants that cover interface types. - -- Nothing is needed either in case of virtual machines, since - -- interfaces are handled directly by the VM. + -- Nothing is needed either in case of virtual targets, since + -- interfaces are handled directly by the target. if not Is_Tagged_Type (Rec_Type) or else Etype (Rec_Type) = Rec_Type @@ -2439,10 +2429,10 @@ package body Exp_Ch3 is -- _Init._Tag := Typ'Tag; - -- Suppress the tag assignment when VM_Target because VM tags are - -- represented implicitly in objects. It is also suppressed in case - -- of CPP_Class types because in this case the tag is initialized in - -- the C++ side. + -- Suppress the tag assignment when not Tagged_Type_Expansion because + -- tags are represented implicitly in objects. It is also suppressed + -- in case of CPP_Class types because in this case the tag is + -- initialized in the C++ side. if Is_Tagged_Type (Rec_Type) and then Tagged_Type_Expansion @@ -2694,11 +2684,7 @@ package body Exp_Ch3 is -- list by Insert_Actions. and then Nkind (First_Non_SCIL_Node (Body_Stmts)) = N_Null_Statement - and then VM_Target = No_VM then - -- Even though the init proc may be null at this time it might get - -- some stuff added to it later by the VM backend. - Set_Is_Null_Init_Proc (Proc_Id); end if; end Build_Init_Procedure; @@ -3525,14 +3511,8 @@ package body Exp_Ch3 is -- Start of processing for Build_Record_Init_Proc begin - -- Check for value type, which means no initialization required - Rec_Type := Defining_Identifier (N); - if Is_Value_Type (Rec_Type) then - return; - end if; - -- This may be full declaration of a private type, in which case -- the visible entity is a record, and the private entity has been -- exchanged with it in the private part of the current package. @@ -4761,24 +4741,6 @@ package body Exp_Ch3 is elsif Is_Limited_Class_Wide_Type (Desig_Typ) and then Tasking_Allowed - - -- Do not create a class-wide master for types whose convention is - -- Java since these types cannot embed Ada tasks anyway. Note that - -- the following test cannot catch the following case: - - -- package java.lang.Object is - -- type Typ is tagged limited private; - -- type Ref is access all Typ'Class; - -- private - -- type Typ is tagged limited ...; - -- pragma Convention (Typ, Java) - -- end; - - -- Because the convention appears after we have done the - -- processing for type Ref. - - and then Convention (Desig_Typ) /= Convention_Java - and then Convention (Desig_Typ) /= Convention_CIL then Build_Class_Wide_Master (Ptr_Typ); end if; @@ -5147,12 +5109,11 @@ package body Exp_Ch3 is -- Step 2: Initialize the components of the object -- Do not initialize the components if their initialization is - -- prohibited or the type represents a value type in a .NET VM. + -- prohibited. if Has_Non_Null_Base_Init_Proc (Typ) and then not No_Initialization (N) and then not Initialization_Suppressed (Typ) - and then not Is_Value_Type (Typ) then -- Do not initialize the components if No_Default_Initialization -- applies as the actual restriction check will occur later @@ -5898,10 +5859,10 @@ package body Exp_Ch3 is -- be re-initialized separately in order to avoid the propagation -- of a wrong tag coming from a view conversion unless the type -- is class wide (in this case the tag comes from the init value). - -- Suppress the tag assignment when VM_Target because VM tags are - -- represented implicitly in objects. Ditto for types that are - -- CPP_CLASS, and for initializations that are aggregates, because - -- they have to have the right tag. + -- Suppress the tag assignment when not Tagged_Type_Expansion + -- because tags are represented implicitly in objects. Ditto for + -- types that are CPP_CLASS, and for initializations that are + -- aggregates, because they have to have the right tag. -- The re-assignment of the tag has to be done even if the object -- is a constant. The assignment must be analyzed after the @@ -6500,18 +6461,10 @@ package body Exp_Ch3 is elsif Is_Concurrent_Type (Root) or else Is_C_Derivation (Root) - or else Convention (Typ) = Convention_CIL or else Convention (Typ) = Convention_CPP - or else Convention (Typ) = Convention_Java then return; - -- Do not create TSS routine Finalize_Address for .NET/JVM because these - -- targets do not support address arithmetic and unchecked conversions. - - elsif VM_Target /= No_VM then - return; - -- Do not create TSS routine Finalize_Address when compiling in CodePeer -- mode since the routine contains an Unchecked_Conversion. @@ -7034,14 +6987,6 @@ package body Exp_Ch3 is then null; - -- Do not add the spec of predefined primitives in case of - -- CIL and Java tagged types - - elsif Convention (Def_Id) = Convention_CIL - or else Convention (Def_Id) = Convention_Java - then - null; - -- Do not add the spec of the predefined primitives if we are -- compiling under restriction No_Dispatching_Calls. @@ -7098,8 +7043,8 @@ package body Exp_Ch3 is end if; -- Create and decorate the tags. Suppress their creation when - -- VM_Target because the dispatching mechanism is handled - -- internally by the VMs. + -- not Tagged_Type_Expansion because the dispatching mechanism is + -- handled internally by the virtual target. if Tagged_Type_Expansion then Append_Freeze_Actions (Def_Id, Make_Tags (Def_Id)); @@ -7111,9 +7056,6 @@ package body Exp_Ch3 is if not Building_Static_DT (Def_Id) then Append_Freeze_Actions (Def_Id, Make_DT (Def_Id)); end if; - - elsif VM_Target /= No_VM then - Append_Freeze_Actions (Def_Id, Make_VM_TSD (Def_Id)); end if; -- If the type has unknown discriminants, propagate dispatching @@ -7240,8 +7182,8 @@ package body Exp_Ch3 is if Tagged_Type_Expansion or else not Is_Interface (Def_Id) then - -- Do not need init for interfaces on e.g. CIL since they're - -- abstract. Helps operation of peverify (the PE Verify tool). + -- Do not need init for interfaces on virtual targets since they're + -- abstract. Build_Record_Init_Proc (Type_Decl, Def_Id); end if; @@ -7262,14 +7204,6 @@ package body Exp_Ch3 is then null; - -- Do not add the body of predefined primitives in case of CIL and - -- Java tagged types. - - elsif Convention (Def_Id) = Convention_CIL - or else Convention (Def_Id) = Convention_Java - then - null; - -- Do not add the body of the predefined primitives if we are -- compiling under restriction No_Dispatching_Calls or if we are -- compiling a CPP tagged type. @@ -7345,75 +7279,62 @@ package body Exp_Ch3 is and then Needs_Finalization (Designated_Type (Comp_Typ)) and then Designated_Type (Comp_Typ) /= Def_Id then - if VM_Target = No_VM then - - -- Build a homogeneous master for the first anonymous - -- access-to-controlled component. This master may be - -- converted into a heterogeneous collection if more - -- components are to follow. + -- Build a homogeneous master for the first anonymous + -- access-to-controlled component. This master may be + -- converted into a heterogeneous collection if more + -- components are to follow. - if not Master_Built then - Master_Built := True; + if not Master_Built then + Master_Built := True; - -- All anonymous access-to-controlled types allocate - -- on the global pool. Note that the finalization - -- master and the associated storage pool must be set - -- on the root type (both are "root type only"). + -- All anonymous access-to-controlled types allocate + -- on the global pool. Note that the finalization + -- master and the associated storage pool must be set + -- on the root type (both are "root type only"). - Set_Associated_Storage_Pool - (Root_Type (Comp_Typ), RTE (RE_Global_Pool_Object)); + Set_Associated_Storage_Pool + (Root_Type (Comp_Typ), RTE (RE_Global_Pool_Object)); - Build_Finalization_Master - (Typ => Root_Type (Comp_Typ), - For_Anonymous => True, - Context_Scope => Encl_Scope, - Insertion_Node => Ins_Node); + Build_Finalization_Master + (Typ => Root_Type (Comp_Typ), + For_Anonymous => True, + Context_Scope => Encl_Scope, + Insertion_Node => Ins_Node); - Fin_Mas_Id := Finalization_Master (Comp_Typ); + Fin_Mas_Id := Finalization_Master (Comp_Typ); - -- Subsequent anonymous access-to-controlled components - -- reuse the available master. + -- Subsequent anonymous access-to-controlled components + -- reuse the available master. - else - -- All anonymous access-to-controlled types allocate - -- on the global pool. Note that both the finalization - -- master and the associated storage pool must be set - -- on the root type (both are "root type only"). + else + -- All anonymous access-to-controlled types allocate + -- on the global pool. Note that both the finalization + -- master and the associated storage pool must be set + -- on the root type (both are "root type only"). - Set_Associated_Storage_Pool - (Root_Type (Comp_Typ), RTE (RE_Global_Pool_Object)); + Set_Associated_Storage_Pool + (Root_Type (Comp_Typ), RTE (RE_Global_Pool_Object)); - -- Shared the master among multiple components + -- Shared the master among multiple components - Set_Finalization_Master - (Root_Type (Comp_Typ), Fin_Mas_Id); + Set_Finalization_Master + (Root_Type (Comp_Typ), Fin_Mas_Id); - -- Convert the master into a heterogeneous collection. - -- Generate: - -- Set_Is_Heterogeneous (); + -- Convert the master into a heterogeneous collection. + -- Generate: + -- Set_Is_Heterogeneous (); - if not Attributes_Set then - Attributes_Set := True; + if not Attributes_Set then + Attributes_Set := True; - Insert_Action (Ins_Node, - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of - (RTE (RE_Set_Is_Heterogeneous), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (Fin_Mas_Id, Loc)))); - end if; + Insert_Action (Ins_Node, + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (RTE (RE_Set_Is_Heterogeneous), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (Fin_Mas_Id, Loc)))); end if; - - -- Since .NET/JVM targets do not support heterogeneous - -- masters, each component must have its own master. - - else - Build_Finalization_Master - (Typ => Comp_Typ, - For_Anonymous => True, - Context_Scope => Encl_Scope, - Insertion_Node => Ins_Node); end if; end if; @@ -7747,10 +7668,6 @@ package body Exp_Ch3 is elsif Ada_Version >= Ada_2012 and then Present (Associated_Storage_Pool (Def_Id)) - -- Omit this check on .NET/JVM where pools are not supported - - and then VM_Target = No_VM - -- Omit this check for the case of a configurable run-time that -- does not provide package System.Storage_Pools.Subpools. @@ -9859,11 +9776,6 @@ package body Exp_Ch3 is if Restriction_Active (No_Finalization) then null; - -- Finalization is not available for CIL value types - - elsif Is_Value_Type (Tag_Typ) then - null; - else if not Is_Limited_Type (Tag_Typ) then Append_To (Res, Predef_Deep_Spec (Loc, Tag_Typ, TSS_Deep_Adjust)); diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index b7778da158b..3463d3aae33 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -544,37 +544,30 @@ package body Exp_Ch4 is -- Step 2: Initialization actions - -- Do not set the base pool and mode of operation on .NET/JVM since - -- those targets do not support pools and all VM masters defaulted to - -- heterogeneous. - - if VM_Target = No_VM then - - -- Generate: - -- Set_Base_Pool - -- (, Global_Pool_Object'Unrestricted_Access); + -- Generate: + -- Set_Base_Pool + -- (, Global_Pool_Object'Unrestricted_Access); - Insert_And_Analyze (Decls, - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (FM_Id, Loc), - Make_Attribute_Reference (Loc, - Prefix => - New_Occurrence_Of (RTE (RE_Global_Pool_Object), Loc), - Attribute_Name => Name_Unrestricted_Access)))); + Insert_And_Analyze (Decls, + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (FM_Id, Loc), + Make_Attribute_Reference (Loc, + Prefix => + New_Occurrence_Of (RTE (RE_Global_Pool_Object), Loc), + Attribute_Name => Name_Unrestricted_Access)))); - -- Generate: - -- Set_Is_Heterogeneous (); + -- Generate: + -- Set_Is_Heterogeneous (); - Insert_And_Analyze (Decls, - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (RTE (RE_Set_Is_Heterogeneous), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (FM_Id, Loc)))); - end if; + Insert_And_Analyze (Decls, + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of (RTE (RE_Set_Is_Heterogeneous), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (FM_Id, Loc)))); Pop_Scope; return FM_Id; @@ -762,7 +755,7 @@ package body Exp_Ch4 is begin if Ada_Version >= Ada_2005 and then Is_Class_Wide_Type (DesigT) - and then (Tagged_Type_Expansion or else VM_Target /= No_VM) + and then Tagged_Type_Expansion and then not Scope_Suppress.Suppress (Accessibility_Check) and then (Type_Access_Level (Etype (Exp)) > Type_Access_Level (PtrT) @@ -1079,21 +1072,6 @@ package body Exp_Ch4 is Build_Allocate_Deallocate_Proc (Temp_Decl, True); Convert_Aggr_In_Allocator (N, Temp_Decl, Exp); - -- Attach the object to the associated finalization master. - -- This is done manually on .NET/JVM since those compilers do - -- no support pools and can't benefit from internally generated - -- Allocate / Deallocate procedures. - - if VM_Target /= No_VM - and then Is_Controlled (DesigT) - and then Present (Finalization_Master (PtrT)) - then - Insert_Action (N, - Make_Attach_Call - (Obj_Ref => New_Occurrence_Of (Temp, Loc), - Ptr_Typ => PtrT)); - end if; - else Node := Relocate_Node (N); Set_Analyzed (Node); @@ -1107,21 +1085,6 @@ package body Exp_Ch4 is Insert_Action (N, Temp_Decl); Build_Allocate_Deallocate_Proc (Temp_Decl, True); - - -- Attach the object to the associated finalization master. - -- This is done manually on .NET/JVM since those compilers do - -- no support pools and can't benefit from internally generated - -- Allocate / Deallocate procedures. - - if VM_Target /= No_VM - and then Is_Controlled (DesigT) - and then Present (Finalization_Master (PtrT)) - then - Insert_Action (N, - Make_Attach_Call - (Obj_Ref => New_Occurrence_Of (Temp, Loc), - Ptr_Typ => PtrT)); - end if; end if; -- Ada 2005 (AI-251): Handle allocators whose designated type is an @@ -1223,7 +1186,7 @@ package body Exp_Ch4 is -- Generate the tag assignment - -- Suppress the tag assignment when VM_Target because VM tags are + -- Suppress the tag assignment for VM targets because VM tags are -- represented implicitly in objects. if not Tagged_Type_Expansion then @@ -1342,21 +1305,6 @@ package body Exp_Ch4 is Build_Allocate_Deallocate_Proc (Temp_Decl, True); Convert_Aggr_In_Allocator (N, Temp_Decl, Exp); - -- Attach the object to the associated finalization master. Thisis - -- done manually on .NET/JVM since those compilers do no support - -- pools and cannot benefit from internally generated Allocate and - -- Deallocate procedures. - - if VM_Target /= No_VM - and then Is_Controlled (DesigT) - and then Present (Finalization_Master (PtrT)) - then - Insert_Action (N, - Make_Attach_Call - (Obj_Ref => New_Occurrence_Of (Temp, Loc), - Ptr_Typ => PtrT)); - end if; - Rewrite (N, New_Occurrence_Of (Temp, Loc)); Analyze_And_Resolve (N, PtrT); @@ -1529,12 +1477,10 @@ package body Exp_Ch4 is begin -- Deal first with unpacked case, where we can call a runtime routine -- except that we avoid this for targets for which are not addressable - -- by bytes, and for the JVM/CIL, since they do not support direct - -- addressing of array components. + -- by bytes. if not Is_Bit_Packed_Array (Typ1) and then Byte_Addressable - and then VM_Target = No_VM then -- The call we generate is: @@ -4322,10 +4268,9 @@ package body Exp_Ch4 is end if; -- Anonymous access-to-controlled types allocate on the global pool. - -- Do not set this attribute on .NET/JVM since those targets do not - -- support pools. Note that this is a "root type only" attribute. + -- Note that this is a "root type only" attribute. - if No (Associated_Storage_Pool (PtrT)) and then VM_Target = No_VM then + if No (Associated_Storage_Pool (PtrT)) then if Present (Rel_Typ) then Set_Associated_Storage_Pool (Root_Type (PtrT), Associated_Storage_Pool (Rel_Typ)); @@ -4361,9 +4306,7 @@ package body Exp_Ch4 is Set_Storage_Pool (N, Pool); if Is_RTE (Pool, RE_SS_Pool) then - if VM_Target = No_VM then - Set_Procedure_To_Call (N, RTE (RE_SS_Allocate)); - end if; + Set_Procedure_To_Call (N, RTE (RE_SS_Allocate)); -- In the case of an allocator for a simple storage pool, locate -- and save a reference to the pool type's Allocate routine. @@ -4563,12 +4506,9 @@ package body Exp_Ch4 is if No_Initialization (N) then -- Even though this might be a simple allocation, create a custom - -- Allocate if the context requires it. Since .NET/JVM compilers - -- do not support pools, this step is skipped. + -- Allocate if the context requires it. - if VM_Target = No_VM - and then Present (Finalization_Master (PtrT)) - then + if Present (Finalization_Master (PtrT)) then Build_Allocate_Deallocate_Proc (N => N, Is_Allocate => True); @@ -4870,24 +4810,6 @@ package body Exp_Ch4 is Make_Init_Call (Obj_Ref => New_Copy_Tree (Init_Arg1), Typ => T)); - - -- Special processing for .NET/JVM, the allocated object is - -- attached to the finalization master. Generate: - - -- Attach (FM, Root_Controlled_Ptr (Init_Arg1)); - - -- Types derived from [Limited_]Controlled are the only ones - -- considered since they have fields Prev and Next. - - if VM_Target /= No_VM - and then Is_Controlled (T) - and then Present (Finalization_Master (PtrT)) - then - Insert_Action (N, - Make_Attach_Call - (Obj_Ref => New_Copy_Tree (Init_Arg1), - Ptr_Typ => PtrT)); - end if; end if; Rewrite (N, New_Occurrence_Of (Temp, Loc)); @@ -5604,11 +5526,6 @@ package body Exp_Ch4 is and then Nkind (Rop) in N_Has_Entity and then Ltyp = Entity (Rop) - -- Skip in VM mode, where we have no sense of invalid values. The - -- warning still seems relevant, but not important enough to worry. - - and then VM_Target = No_VM - -- Skip this for predicated types, where such expressions are a -- reasonable way of testing if something meets the predicate. @@ -5684,10 +5601,6 @@ package body Exp_Ch4 is -- Relevant only for source cases and then Comes_From_Source (N) - - -- Omit for VM cases, where we don't have invalid values - - and then VM_Target = No_VM then Substitute_Valid_Check; goto Leave; @@ -5845,9 +5758,9 @@ package body Exp_Ch4 is if Is_Tagged_Type (Typ) then - -- No expansion will be performed when VM_Target, as the VM + -- No expansion will be performed for VM targets, as the VM -- back-ends will handle the membership tests directly (tags - -- are not explicitly represented in Java objects, so the + -- are not explicitly represented in VM objects, so the -- normal tagged membership expansion is not what we want). if Tagged_Type_Expansion then @@ -6105,10 +6018,10 @@ package body Exp_Ch4 is Left_Opnd => Obj, Right_Opnd => Make_Null (Loc)))); - -- No expansion will be performed when VM_Target, as + -- No expansion will be performed for VM targets, as -- the VM back-ends will handle the membership tests -- directly (tags are not explicitly represented in - -- Java objects, so the normal tagged membership + -- objects, so the normal tagged membership -- expansion is not what we want). if Tagged_Type_Expansion then @@ -11449,15 +11362,6 @@ package body Exp_Ch4 is or else Chars (Comp) = Name_uTag - -- The .NET/JVM version of type Root_Controlled contains two - -- fields which should not be considered part of the object. To - -- achieve proper equiality between two controlled objects on - -- .NET/JVM, skip _Parent whenever it has type Root_Controlled. - - or else (Chars (Comp) = Name_uParent - and then VM_Target /= No_VM - and then Etype (Comp) = RTE (RE_Root_Controlled)) - -- Skip interface elements (secondary tags???) or else Is_Interface (Etype (Comp))); @@ -13255,11 +13159,6 @@ package body Exp_Ch4 is if Component_Size (Etype (Lhs)) /= System_Storage_Unit then return False; - -- Cannot do in place stuff on VM_Target since cannot pass addresses - - elsif VM_Target /= No_VM then - return False; - -- Cannot do in place stuff if non-standard Boolean representation elsif Has_Non_Standard_Rep (Component_Type (Etype (Lhs))) then diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 3584202a6dc..c0cd6044180 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -387,14 +387,6 @@ package body Exp_Ch5 is and then (not Is_Constrained (Etype (Lhs)) or else not Is_First_Subtype (Etype (Lhs))) - - -- In the case of compiling for the Java or .NET Virtual Machine, - -- slices are always passed by making a copy, so we don't have to - -- worry about overlap. We also want to prevent generation of "<" - -- comparisons for array addresses, since that's a meaningless - -- operation on the VM. - - and then VM_Target = No_VM then Set_Forwards_OK (N, False); Set_Backwards_OK (N, False); @@ -764,7 +756,7 @@ package body Exp_Ch5 is -- The GCC back end can deal with all cases of overlap by falling -- back to memmove if it cannot use a more efficient approach. - if VM_Target = No_VM and not AAMP_On_Target then + if not AAMP_On_Target then return; -- Assume other back ends can handle it if Forwards_OK is set @@ -937,9 +929,9 @@ package body Exp_Ch5 is -- We normally compare addresses to find out which way round to -- do the loop, since this is reliable, and handles the cases of -- parameters, conversions etc. But we can't do that in the bit - -- packed case or the VM case, because addresses don't work there. + -- packed case, because addresses don't work there. - if not Is_Bit_Packed_Array (L_Type) and then VM_Target = No_VM then + if not Is_Bit_Packed_Array (L_Type) then Condition := Make_Op_Le (Loc, Left_Opnd => @@ -2165,14 +2157,6 @@ package body Exp_Ch5 is then Make_Build_In_Place_Call_In_Assignment (N, Rhs); - elsif Is_Tagged_Type (Typ) and then Is_Value_Type (Etype (Lhs)) then - - -- Nothing to do for valuetypes - -- ??? Set_Scope_Is_Transient (False); - - Ghost_Mode := Save_Ghost_Mode; - return; - elsif Is_Tagged_Type (Typ) or else (Needs_Finalization (Typ) and then not Is_Array_Type (Typ)) then @@ -2208,7 +2192,6 @@ package body Exp_Ch5 is -- generated. or else (Is_Tagged_Type (Typ) - and then not Is_Value_Type (Etype (Lhs)) and then Chars (Current_Scope) /= Name_uAssign and then Expand_Ctrl_Actions and then @@ -4577,11 +4560,6 @@ package body Exp_Ch5 is and then not Comp_Asn and then not No_Ctrl_Actions (N) and then Tagged_Type_Expansion; - -- Tags are not saved and restored when VM_Target because VM tags are - -- represented implicitly in objects. - - Next_Id : Entity_Id; - Prev_Id : Entity_Id; Tag_Id : Entity_Id; begin @@ -4642,48 +4620,6 @@ package body Exp_Ch5 is Tag_Id := Empty; end if; - -- Save the Prev and Next fields on .NET/JVM. This is not needed on non - -- VM targets since the fields are not part of the object. - - if VM_Target /= No_VM - and then Is_Controlled (T) - then - Prev_Id := Make_Temporary (Loc, 'P'); - Next_Id := Make_Temporary (Loc, 'N'); - - -- Generate: - -- Pnn : Root_Controlled_Ptr := Root_Controlled (L).Prev; - - Append_To (Res, - Make_Object_Declaration (Loc, - Defining_Identifier => Prev_Id, - Object_Definition => - New_Occurrence_Of (RTE (RE_Root_Controlled_Ptr), Loc), - Expression => - Make_Selected_Component (Loc, - Prefix => - Unchecked_Convert_To - (RTE (RE_Root_Controlled), New_Copy_Tree (L)), - Selector_Name => - Make_Identifier (Loc, Name_Prev)))); - - -- Generate: - -- Nnn : Root_Controlled_Ptr := Root_Controlled (L).Next; - - Append_To (Res, - Make_Object_Declaration (Loc, - Defining_Identifier => Next_Id, - Object_Definition => - New_Occurrence_Of (RTE (RE_Root_Controlled_Ptr), Loc), - Expression => - Make_Selected_Component (Loc, - Prefix => - Unchecked_Convert_To - (RTE (RE_Root_Controlled), New_Copy_Tree (L)), - Selector_Name => - Make_Identifier (Loc, Name_Next)))); - end if; - -- If the tagged type has a full rep clause, expand the assignment into -- component-wise assignments. Mark the node as unanalyzed in order to -- generate the proper code and propagate this scenario by setting a @@ -4709,39 +4645,6 @@ package body Exp_Ch5 is Expression => New_Occurrence_Of (Tag_Id, Loc))); end if; - -- Restore the Prev and Next fields on .NET/JVM - - if VM_Target /= No_VM - and then Is_Controlled (T) - then - -- Generate: - -- Root_Controlled (L).Prev := Prev_Id; - - Append_To (Res, - Make_Assignment_Statement (Loc, - Name => - Make_Selected_Component (Loc, - Prefix => - Unchecked_Convert_To - (RTE (RE_Root_Controlled), New_Copy_Tree (L)), - Selector_Name => - Make_Identifier (Loc, Name_Prev)), - Expression => New_Occurrence_Of (Prev_Id, Loc))); - - -- Generate: - -- Root_Controlled (L).Next := Next_Id; - - Append_To (Res, - Make_Assignment_Statement (Loc, - Name => - Make_Selected_Component (Loc, - Prefix => - Unchecked_Convert_To - (RTE (RE_Root_Controlled), New_Copy_Tree (L)), - Selector_Name => Make_Identifier (Loc, Name_Next)), - Expression => New_Occurrence_Of (Next_Id, Loc))); - end if; - -- Adjust the target after the assignment when controlled (not in the -- init proc since it is an initialization more than an assignment). diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index e6efc3ab80f..c2165438bf4 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -369,11 +369,9 @@ package body Exp_Ch6 is (Function_Call, Alloc_Form_Formal, Alloc_Form_Actual); -- Pass the Storage_Pool parameter. This parameter is omitted on - -- .NET/JVM/ZFP as those targets do not support pools. + -- ZFP as those targets do not support pools. - if VM_Target = No_VM - and then RTE_Available (RE_Root_Storage_Pool_Ptr) - then + if 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 @@ -2357,7 +2355,6 @@ package body Exp_Ch6 is -- Local variables - Curr_S : constant Entity_Id := Current_Scope; Remote : constant Boolean := Is_Remote_Call (Call_Node); Actual : Node_Id; Formal : Entity_Id; @@ -2458,52 +2455,6 @@ package body Exp_Ch6 is end if; end if; - -- Detect the following code in System.Finalization_Masters only on - -- .NET/JVM targets: - - -- procedure Finalize (Master : in out Finalization_Master) is - -- begin - -- . . . - -- begin - -- Finalize (Curr_Ptr.all); - - -- Since .NET/JVM compilers lack address arithmetic and Deep_Finalize - -- cannot be named in library or user code, the compiler has to deal - -- with this by transforming the call to Finalize into Deep_Finalize. - - if VM_Target /= No_VM - and then Chars (Subp) = Name_Finalize - and then Ekind (Curr_S) = E_Block - and then Ekind (Scope (Curr_S)) = E_Procedure - and then Chars (Scope (Curr_S)) = Name_Finalize - and then Etype (First_Formal (Scope (Curr_S))) = - RTE (RE_Finalization_Master) - then - declare - Deep_Fin : constant Entity_Id := - Find_Prim_Op (RTE (RE_Root_Controlled), - TSS_Deep_Finalize); - begin - -- Since Root_Controlled is a tagged type, the compiler should - -- always generate Deep_Finalize for it. - - pragma Assert (Present (Deep_Fin)); - - -- Generate: - -- Deep_Finalize (Curr_Ptr.all); - - Rewrite (N, - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (Deep_Fin, Loc), - Parameter_Associations => - New_Copy_List_Tree (Parameter_Associations (N)))); - - Analyze (N); - return; - end; - end if; - -- Ada 2005 (AI-345): We have a procedure call as a triggering -- alternative in an asynchronous select or as an entry call in -- a conditional or timed select. Check whether the procedure call @@ -2952,15 +2903,6 @@ package body Exp_Ch6 is elsif Nkind_In (Prev, N_Allocator, N_Attribute_Reference) then null; - -- Suppress null checks when passing to access parameters of Java - -- and CIL subprograms. (Should this be done for other foreign - -- conventions as well ???) - - elsif Convention (Subp) = Convention_Java - or else Convention (Subp) = Convention_CIL - then - null; - else Install_Null_Excluding_Check (Prev); end if; @@ -3291,7 +3233,7 @@ package body Exp_Ch6 is -- extra actuals since this will be done on the re-analysis of the -- dispatching call. Note that we do not try to shorten the actual list -- for a dispatching call, it would not make sense to do so. Expansion - -- of dispatching calls is suppressed when VM_Target, because the VM + -- of dispatching calls is suppressed for VM targets, because the VM -- back-ends directly handle the generation of dispatching calls and -- would have to undo any expansion to an indirect call. @@ -4068,12 +4010,9 @@ package body Exp_Ch6 is begin pragma Assert (Is_Build_In_Place_Function (Func_Id)); - -- Processing for build-in-place object allocation. This is disabled - -- on .NET/JVM because the targets do not support pools. + -- Processing for build-in-place object allocation. - if VM_Target = No_VM - and then Needs_Finalization (Ret_Typ) - then + if Needs_Finalization (Ret_Typ) then declare Decls : constant List_Id := New_List; Fin_Mas_Id : constant Entity_Id := @@ -4667,12 +4606,10 @@ package body Exp_Ch6 is Pool_Allocator := New_Copy_Tree (Heap_Allocator); -- Do not generate the renaming of the build-in-place - -- pool parameter on .NET/JVM/ZFP because the parameter - -- is not created in the first place. + -- pool parameter on ZFP because the parameter is not + -- created in the first place. - if VM_Target = No_VM - and then RTE_Available (RE_Root_Storage_Pool_Ptr) - then + if RTE_Available (RE_Root_Storage_Pool_Ptr) then Pool_Decl := Make_Object_Renaming_Declaration (Loc, Defining_Identifier => Pool_Id, @@ -4721,29 +4658,26 @@ package body Exp_Ch6 is Set_Comes_From_Source (Pool_Allocator, True); end if; - -- The allocator is returned on the secondary stack. We - -- don't do this on VM targets, since the SS is not used. + -- The allocator is returned on the secondary stack. - if VM_Target = No_VM then - Set_Storage_Pool (SS_Allocator, RTE (RE_SS_Pool)); - Set_Procedure_To_Call - (SS_Allocator, RTE (RE_SS_Allocate)); - - -- The allocator is returned on the secondary stack, - -- so indicate that the function return, as well as - -- the block that encloses the allocator, must not - -- release it. The flags must be set now because - -- the decision to use the secondary stack is done - -- very late in the course of expanding the return - -- statement, past the point where these flags are - -- normally set. - - Set_Sec_Stack_Needed_For_Return (Par_Func); - Set_Sec_Stack_Needed_For_Return - (Return_Statement_Entity (N)); - Set_Uses_Sec_Stack (Par_Func); - Set_Uses_Sec_Stack (Return_Statement_Entity (N)); - end if; + Set_Storage_Pool (SS_Allocator, RTE (RE_SS_Pool)); + Set_Procedure_To_Call + (SS_Allocator, RTE (RE_SS_Allocate)); + + -- The allocator is returned on the secondary stack, + -- so indicate that the function return, as well as + -- the block that encloses the allocator, must not + -- release it. The flags must be set now because + -- the decision to use the secondary stack is done + -- very late in the course of expanding the return + -- statement, past the point where these flags are + -- normally set. + + Set_Sec_Stack_Needed_For_Return (Par_Func); + Set_Sec_Stack_Needed_For_Return + (Return_Statement_Entity (N)); + Set_Uses_Sec_Stack (Par_Func); + Set_Uses_Sec_Stack (Return_Statement_Entity (N)); -- Create an if statement to test the BIP_Alloc_Form -- formal and initialize the access object to either the @@ -6174,13 +6108,7 @@ package body Exp_Ch6 is else Check_Restriction (No_Secondary_Stack, N); Set_Storage_Pool (N, RTE (RE_SS_Pool)); - - -- If we are generating code for the VM do not use - -- SS_Allocate since everything is heap-allocated anyway. - - if VM_Target = No_VM then - Set_Procedure_To_Call (N, RTE (RE_SS_Allocate)); - end if; + Set_Procedure_To_Call (N, RTE (RE_SS_Allocate)); end if; end if; @@ -8178,8 +8106,8 @@ package body Exp_Ch6 is begin -- We suppress the initialization of the dispatch table entry when - -- VM_Target because the dispatching mechanism is handled internally - -- by the VM. + -- not Tagged_Type_Expansion because the dispatching mechanism is + -- handled internally by the target. if Is_Dispatching_Operation (Subp) and then not Is_Abstract_Subprogram (Subp) @@ -8454,9 +8382,7 @@ package body Exp_Ch6 is -- pool, and pass the pool. Use 'Unrestricted_Access because the -- pool may not be aliased. - if VM_Target = No_VM - and then Present (Associated_Storage_Pool (Acc_Type)) - then + if Present (Associated_Storage_Pool (Acc_Type)) then Alloc_Form := User_Storage_Pool; Pool := Make_Attribute_Reference (Loc, @@ -8983,14 +8909,12 @@ package body Exp_Ch6 is -- has an unconstrained or tagged result type). if Needs_BIP_Alloc_Form (Enclosing_Func) then - if VM_Target = No_VM and then - RTE_Available (RE_Root_Storage_Pool_Ptr) - then + if RTE_Available (RE_Root_Storage_Pool_Ptr) then Pool_Actual := New_Occurrence_Of (Build_In_Place_Formal (Enclosing_Func, BIP_Storage_Pool), Loc); - -- The build-in-place pool formal is not built on .NET/JVM + -- The build-in-place pool formal is not built on e.g. ZFP else Pool_Actual := Empty; diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index a45b911d1ae..cc5948195ab 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -61,7 +61,6 @@ with Sem_Res; use Sem_Res; with Sem_Util; use Sem_Util; with Snames; use Snames; with Stand; use Stand; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Ttypes; use Ttypes; with Uintp; use Uintp; @@ -458,16 +457,13 @@ package body Exp_Ch7 is Typ => Typ, Stmts => Make_Deep_Array_Body (Finalize_Case, Typ))); - -- Create TSS primitive Finalize_Address for non-VM targets. JVM and - -- .NET do not support address arithmetic and unchecked conversions. + -- Create TSS primitive Finalize_Address. - if VM_Target = No_VM then - Set_TSS (Typ, - Make_Deep_Proc - (Prim => Address_Case, - Typ => Typ, - Stmts => Make_Deep_Array_Body (Address_Case, Typ))); - end if; + Set_TSS (Typ, + Make_Deep_Proc + (Prim => Address_Case, + Typ => Typ, + Stmts => Make_Deep_Array_Body (Address_Case, Typ))); end if; end Build_Array_Deep_Procs; @@ -845,13 +841,11 @@ package body Exp_Ch7 is if Restriction_Active (No_Finalization) then return; - -- Do not process C, C++, CIL and Java types since it is assumend that - -- the non-Ada side will handle their clean up. + -- Do not process C, C++ types since it is assumed that the non-Ada side + -- will handle their clean up. elsif Convention (Desig_Typ) = Convention_C - or else Convention (Desig_Typ) = Convention_CIL or else Convention (Desig_Typ) = Convention_CPP - or else Convention (Desig_Typ) = Convention_Java then return; @@ -896,13 +890,6 @@ package body Exp_Ch7 is then return; - -- For .NET/JVM targets, allow the processing of access-to-controlled - -- types where the designated type is explicitly derived from [Limited_] - -- Controlled. - - elsif VM_Target /= No_VM and then not Is_Controlled (Desig_Typ) then - return; - -- Do not create finalization masters in GNATprove mode because this -- unwanted extra expansion. A compilation in this mode keeps the tree -- as close as possible to the original sources. @@ -948,85 +935,81 @@ package body Exp_Ch7 is New_Occurrence_Of (RTE (RE_Finalization_Master), Loc))); -- Set the associated pool and primitive Finalize_Address of the new - -- finalization master. This step is skipped on .NET/JVM because the - -- target does not support storage pools or address arithmetic. + -- finalization master. - if VM_Target = No_VM then + -- The access type has a user-defined storage pool, use it - -- The access type has a user-defined storage pool, use it + if Present (Associated_Storage_Pool (Ptr_Typ)) then + Pool_Id := Associated_Storage_Pool (Ptr_Typ); - if Present (Associated_Storage_Pool (Ptr_Typ)) then - Pool_Id := Associated_Storage_Pool (Ptr_Typ); + -- Otherwise the default choice is the global storage pool - -- Otherwise the default choice is the global storage pool - - else - Pool_Id := RTE (RE_Global_Pool_Object); - Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id); - end if; + else + Pool_Id := RTE (RE_Global_Pool_Object); + Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id); + end if; - -- Generate: - -- Set_Base_Pool (FM, Pool_Id'Unchecked_Access); + -- Generate: + -- Set_Base_Pool (FM, Pool_Id'Unchecked_Access); - Append_To (Actions, - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (Fin_Mas_Id, Loc), - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Pool_Id, Loc), - Attribute_Name => Name_Unrestricted_Access)))); + Append_To (Actions, + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (Fin_Mas_Id, Loc), + Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of (Pool_Id, Loc), + Attribute_Name => Name_Unrestricted_Access)))); - -- Finalize_Address is not generated in CodePeer mode because the - -- body contains address arithmetic. Skip this step. + -- Finalize_Address is not generated in CodePeer mode because the + -- body contains address arithmetic. Skip this step. - if CodePeer_Mode then - null; + if CodePeer_Mode then + null; - -- Associate the Finalize_Address primitive of the designated type - -- with the finalization master of the access type. The designated - -- type must be forzen as Finalize_Address is generated when the - -- freeze node is expanded. + -- Associate the Finalize_Address primitive of the designated type + -- with the finalization master of the access type. The designated + -- type must be forzen as Finalize_Address is generated when the + -- freeze node is expanded. - elsif Is_Frozen (Desig_Typ) - and then Present (Finalize_Address (Desig_Typ)) + elsif Is_Frozen (Desig_Typ) + and then Present (Finalize_Address (Desig_Typ)) - -- The finalization master of an anonymous access type may need - -- to be inserted in a specific place in the tree. For instance: + -- The finalization master of an anonymous access type may need + -- to be inserted in a specific place in the tree. For instance: - -- type Comp_Typ; + -- type Comp_Typ; - -- + -- - -- type Rec_Typ is record - -- Comp : access Comp_Typ; - -- end record; + -- type Rec_Typ is record + -- Comp : access Comp_Typ; + -- end record; - -- - -- + -- + -- - -- Due to this oddity, the anonymous access type is stored for - -- later processing (see below). + -- Due to this oddity, the anonymous access type is stored for + -- later processing (see below). - and then Ekind (Ptr_Typ) /= E_Anonymous_Access_Type - then - -- Generate: - -- Set_Finalize_Address - -- (FM, FD'Unrestricted_Access); + and then Ekind (Ptr_Typ) /= E_Anonymous_Access_Type + then + -- Generate: + -- Set_Finalize_Address + -- (FM, FD'Unrestricted_Access); - Append_To (Actions, - Make_Set_Finalize_Address_Call - (Loc => Loc, - Ptr_Typ => Ptr_Typ)); + Append_To (Actions, + Make_Set_Finalize_Address_Call + (Loc => Loc, + Ptr_Typ => Ptr_Typ)); - -- Otherwise the designated type is either anonymous access or a - -- Taft-amendment type and has not been frozen. Store the access - -- type for later processing (see Freeze_Type). + -- Otherwise the designated type is either anonymous access or a + -- Taft-amendment type and has not been frozen. Store the access + -- type for later processing (see Freeze_Type). - else - Add_Pending_Access_Type (Desig_Typ, Ptr_Typ); - end if; + else + Add_Pending_Access_Type (Desig_Typ, Ptr_Typ); end if; -- A finalization master created for an anonymous access type or an @@ -2869,10 +2852,9 @@ package body Exp_Ch7 is -- end if; -- The generated code effectively detaches the temporary from the - -- caller finalization master and deallocates the object. This is - -- disabled on .NET/JVM because pools are not supported. + -- caller finalization master and deallocates the object. - if VM_Target = No_VM and then Is_Return_Object (Obj_Id) then + if Is_Return_Object (Obj_Id) then declare Func_Id : constant Entity_Id := Enclosing_Function (Obj_Id); begin @@ -3261,14 +3243,10 @@ package body Exp_Ch7 is -- order to detect this scenario, save the state of entry into the -- finalization code. - -- No need to do this for VM case, since VM version of Ada.Exceptions - -- does not include routine Raise_From_Controlled_Operation which is the - -- the sole user of flag Abort. - -- This is not needed for library-level finalizers as they are called by -- the environment task and cannot be aborted. - if VM_Target = No_VM and then not For_Package then + if not For_Package then if Abort_Allowed then Data.Abort_Id := Make_Temporary (Loc, 'A'); @@ -3294,7 +3272,7 @@ package body Exp_Ch7 is Data.Abort_Id := Empty; end if; - -- .NET/JVM or library-level finalizers + -- Library-level finalizers else Data.Abort_Id := Empty; @@ -3424,16 +3402,13 @@ package body Exp_Ch7 is Typ => Typ, Stmts => Make_Deep_Record_Body (Finalize_Case, Typ))); - -- Create TSS primitive Finalize_Address for non-VM targets. JVM and - -- .NET do not support address arithmetic and unchecked conversions. + -- Create TSS primitive Finalize_Address - if VM_Target = No_VM then - Set_TSS (Typ, - Make_Deep_Proc - (Prim => Address_Case, - Typ => Typ, - Stmts => Make_Deep_Record_Body (Address_Case, Typ))); - end if; + Set_TSS (Typ, + Make_Deep_Proc + (Prim => Address_Case, + Typ => Typ, + Stmts => Make_Deep_Record_Body (Address_Case, Typ))); end if; end Build_Record_Deep_Procs; @@ -3930,8 +3905,7 @@ package body Exp_Ch7 is Needs_Sec_Stack_Mark : constant Boolean := Uses_Sec_Stack (Scop) and then - not Sec_Stack_Needed_For_Return (Scop) - and then VM_Target = No_VM; + not Sec_Stack_Needed_For_Return (Scop); Needs_Custom_Cleanup : constant Boolean := Nkind (N) = N_Block_Statement and then Present (Cleanup_Actions (N)); @@ -4064,9 +4038,6 @@ package body Exp_Ch7 is -- -- Mnn : constant Mark_Id := SS_Mark; - -- Suppress calls to SS_Mark and SS_Release if VM_Target, since the - -- secondary stack is never used on a VM. - if Needs_Sec_Stack_Mark then Mark := Make_Temporary (Loc, 'M'); @@ -5192,27 +5163,6 @@ package body Exp_Ch7 is end if; end Make_Adjust_Call; - ---------------------- - -- Make_Attach_Call -- - ---------------------- - - function Make_Attach_Call - (Obj_Ref : Node_Id; - Ptr_Typ : Entity_Id) return Node_Id - is - pragma Assert (VM_Target /= No_VM); - - Loc : constant Source_Ptr := Sloc (Obj_Ref); - begin - return - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (RTE (RE_Attach), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (Finalization_Master (Ptr_Typ), Loc), - Unchecked_Convert_To (RTE (RE_Root_Controlled_Ptr), Obj_Ref))); - end Make_Attach_Call; - ---------------------- -- Make_Detach_Call -- ---------------------- @@ -7928,8 +7878,7 @@ package body Exp_Ch7 is begin -- Case where only secondary stack use is involved - if VM_Target = No_VM - and then Uses_Sec_Stack (Current_Scope) + if Uses_Sec_Stack (Current_Scope) and then Nkind (Action) /= N_Simple_Return_Statement and then Nkind (Par) /= N_Exception_Handler then @@ -8144,8 +8093,7 @@ package body Exp_Ch7 is (N => N, Clean => True, Manage_SS => - VM_Target = No_VM - and then Uses_Sec_Stack (Curr_S) + Uses_Sec_Stack (Curr_S) and then Nkind (N) = N_Object_Declaration and then Ekind_In (Encl_S, E_Package, E_Package_Body) and then Is_Library_Level_Entity (Encl_S)); @@ -8157,10 +8105,9 @@ package body Exp_Ch7 is Transfer_Entities (Curr_S, Encl_S); -- Mark the enclosing dynamic scope to ensure that the secondary stack - -- is properly released upon exiting the said scope. This is not needed - -- for .NET/JVM as those do not support the secondary stack. + -- is properly released upon exiting the said scope. - if VM_Target = No_VM and then Uses_Sec_Stack (Curr_S) then + if Uses_Sec_Stack (Curr_S) then Curr_S := Enclosing_Dynamic_Scope (Curr_S); -- Do not mark a function that returns on the secondary stack as the diff --git a/gcc/ada/exp_ch7.ads b/gcc/ada/exp_ch7.ads index 0fcc0458615..eac45dc0b63 100644 --- a/gcc/ada/exp_ch7.ads +++ b/gcc/ada/exp_ch7.ads @@ -169,18 +169,6 @@ package Exp_Ch7 is -- adjusted. Typ is the expected type of Obj_Ref. When Skip_Self is set, -- only the components (if any) are adjusted. - function Make_Attach_Call - (Obj_Ref : Node_Id; - Ptr_Typ : Entity_Id) return Node_Id; - -- Create a call to prepend an object to a finalization collection. Obj_Ref - -- is the object, Ptr_Typ is the access type that owns the collection. This - -- is used only for .NET/JVM, that is, when VM_Target /= No_VM. - -- Generate the following: - -- - -- Ada.Finalization.Heap_Management.Attach - -- (FC, - -- System.Finalization_Root.Root_Controlled_Ptr (Obj_Ref)); - function Make_Detach_Call (Obj_Ref : Node_Id) return Node_Id; -- Create a call to unhook an object from an arbitrary list. Obj_Ref is the -- object. Generate the following: diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 72b83440c20..4c6962cddb5 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -4780,26 +4780,6 @@ package body Exp_Ch9 is Prefix => New_Occurrence_Of (Defining_Identifier (N_Node), Loc))); - -- If it is a VM_By_Copy_Actual, copy it to a new variable - - elsif Is_VM_By_Copy_Actual (Actual) then - N_Node := - Make_Object_Declaration (Loc, - Defining_Identifier => Make_Temporary (Loc, 'J'), - Aliased_Present => True, - Object_Definition => - New_Occurrence_Of (Etype (Formal), Loc), - Expression => New_Copy_Tree (Actual)); - Set_Assignment_OK (N_Node); - - Append (N_Node, Decls); - - Append_To (Plist, - Make_Attribute_Reference (Loc, - Attribute_Name => Name_Unchecked_Access, - Prefix => - New_Occurrence_Of (Defining_Identifier (N_Node), Loc))); - else -- Interface class-wide formal @@ -4950,8 +4930,7 @@ package body Exp_Ch9 is Set_Assignment_OK (Actual); while Present (Actual) loop - if (Is_By_Copy_Type (Etype (Actual)) - or else Is_VM_By_Copy_Actual (Actual)) + if Is_By_Copy_Type (Etype (Actual)) and then Ekind (Formal) /= E_In_Parameter then N_Node := @@ -7584,29 +7563,17 @@ package body Exp_Ch9 is Has_Created_Identifier => True, Is_Asynchronous_Call_Block => True); - -- For the VM call Update_Exception instead of Abort_Undefer. - -- See 4jexcept.ads for an explanation. - - if VM_Target = No_VM then - if Exception_Mechanism = Back_End_Exceptions then + if Exception_Mechanism = Back_End_Exceptions then - -- Aborts are not deferred at beginning of exception handlers - -- in ZCX. + -- Aborts are not deferred at beginning of exception handlers + -- in ZCX. - Handler_Stmt := Make_Null_Statement (Loc); + Handler_Stmt := Make_Null_Statement (Loc); - else - Handler_Stmt := Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Abort_Undefer), Loc), - Parameter_Associations => No_List); - end if; else Handler_Stmt := Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Update_Exception), Loc), - Parameter_Associations => New_List ( - Make_Function_Call (Loc, - Name => New_Occurrence_Of - (RTE (RE_Current_Target_Exception), Loc)))); + Name => New_Occurrence_Of (RTE (RE_Abort_Undefer), Loc), + Parameter_Associations => No_List); end if; Stmts := New_List ( @@ -14218,31 +14185,17 @@ package body Exp_Ch9 is -- it's actually inside the init procedure for the record type that -- corresponds to the task type. - -- This processing is causing a crash in the .NET/JVM back ends that - -- is not yet understood, so skip it in these cases ??? - - if VM_Target = No_VM then - Set_Itype (Ref, Subp_Ptr_Typ); - Append_Freeze_Action (Task_Rec, Ref); - - Append_To (Args, - Unchecked_Convert_To (RTE (RE_Task_Procedure_Access), - Make_Qualified_Expression (Loc, - Subtype_Mark => New_Occurrence_Of (Subp_Ptr_Typ, Loc), - Expression => - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Body_Proc, Loc), - Attribute_Name => Name_Unrestricted_Access)))); - - -- For the .NET/JVM cases revert to the original code below ??? + Set_Itype (Ref, Subp_Ptr_Typ); + Append_Freeze_Action (Task_Rec, Ref); - else - Append_To (Args, - Unchecked_Convert_To (RTE (RE_Task_Procedure_Access), - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Body_Proc, Loc), - Attribute_Name => Name_Address))); - end if; + Append_To (Args, + Unchecked_Convert_To (RTE (RE_Task_Procedure_Access), + Make_Qualified_Expression (Loc, + Subtype_Mark => New_Occurrence_Of (Subp_Ptr_Typ, Loc), + Expression => + Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of (Body_Proc, Loc), + Attribute_Name => Name_Unrestricted_Access)))); end; -- Discriminants parameter. This is just the address of the task diff --git a/gcc/ada/exp_dbug.adb b/gcc/ada/exp_dbug.adb index 1a05adb73c9..8151923d2c8 100644 --- a/gcc/ada/exp_dbug.adb +++ b/gcc/ada/exp_dbug.adb @@ -38,7 +38,6 @@ with Sinfo; use Sinfo; with Stand; use Stand; with Stringt; use Stringt; with Table; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Urealp; use Urealp; @@ -373,14 +372,6 @@ package body Exp_Dbug is return Empty; end if; - -- Do not output those local variables in VM case, as this does not - -- help debugging (they are just unused), and might lead to duplicated - -- local variable names. - - if VM_Target /= No_VM then - return Empty; - end if; - -- Get renamed entity and compute suffix Name_Len := 0; diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 88965c71f26..d8ad4f8fd8c 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -62,7 +62,6 @@ with Snames; use Snames; with Stand; use Stand; with Stringt; use Stringt; with SCIL_LL; use SCIL_LL; -with Targparm; use Targparm; with Tbuild; use Tbuild; package body Exp_Disp is @@ -291,7 +290,6 @@ package body Exp_Disp is return Static_Dispatch_Tables and then Is_Library_Level_Tagged_Type (Typ) - and then VM_Target = No_VM -- If the type is derived from a CPP class we cannot statically -- build the dispatch tables because we must inherit primitives @@ -1174,35 +1172,6 @@ package body Exp_Disp is end; if not Tagged_Type_Expansion then - if VM_Target /= No_VM then - if Is_Access_Type (Operand_Typ) then - Operand_Typ := Designated_Type (Operand_Typ); - end if; - - if Is_Class_Wide_Type (Operand_Typ) then - Operand_Typ := Root_Type (Operand_Typ); - end if; - - if not Is_Static and then Operand_Typ /= Iface_Typ then - Insert_Action (N, - Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of - (RTE (RE_Check_Interface_Conversion), Loc), - Parameter_Associations => New_List ( - Make_Attribute_Reference (Loc, - Prefix => Duplicate_Subexpr (Expression (N)), - Attribute_Name => Name_Tag), - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Iface_Typ, Loc), - Attribute_Name => Name_Tag)))); - end if; - - -- Just do a conversion ??? - - Rewrite (N, Unchecked_Convert_To (Etype (N), N)); - Analyze (N); - end if; - return; -- A static conversion to an interface type that is not classwide is @@ -4474,8 +4443,6 @@ package body Exp_Disp is if Has_Dispatch_Table (Typ) or else No (Access_Disp_Table (Typ)) or else Is_CPP_Class (Typ) - or else Convention (Typ) = Convention_CIL - or else Convention (Typ) = Convention_Java then Ghost_Mode := Save_Ghost_Mode; return Result; @@ -6254,537 +6221,6 @@ package body Exp_Disp is return Result; end Make_DT; - ----------------- - -- Make_VM_TSD -- - ----------------- - - function Make_VM_TSD (Typ : Entity_Id) return List_Id is - Loc : constant Source_Ptr := Sloc (Typ); - Result : constant List_Id := New_List; - - function Count_Primitives (Typ : Entity_Id) return Nat; - -- Count the non-predefined primitive operations of Typ - - ---------------------- - -- Count_Primitives -- - ---------------------- - - function Count_Primitives (Typ : Entity_Id) return Nat is - Nb_Prim : Nat; - Prim_Elmt : Elmt_Id; - Prim : Entity_Id; - - begin - Nb_Prim := 0; - - Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); - while Present (Prim_Elmt) loop - Prim := Node (Prim_Elmt); - - if Is_Predefined_Dispatching_Operation (Prim) - or else Is_Predefined_Dispatching_Alias (Prim) - then - null; - - elsif Present (Interface_Alias (Prim)) then - null; - - else - Nb_Prim := Nb_Prim + 1; - end if; - - Next_Elmt (Prim_Elmt); - end loop; - - return Nb_Prim; - end Count_Primitives; - - -------------- - -- Make_OSD -- - -------------- - - function Make_OSD (Iface : Entity_Id) return Node_Id; - -- Generate the Object Specific Data table required to dispatch calls - -- through synchronized interfaces. Returns a node that references the - -- generated OSD object. - - function Make_OSD (Iface : Entity_Id) return Node_Id is - Nb_Prim : constant Nat := Count_Primitives (Iface); - OSD : Entity_Id; - OSD_Aggr_List : List_Id; - - begin - -- Generate - -- OSD : Ada.Tags.Object_Specific_Data (Nb_Prims) := - -- (OSD_Table => (1 => , - -- ... - -- N => )); - - if Nb_Prim = 0 - or else Is_Abstract_Type (Typ) - or else Is_Controlled (Typ) - or else Restriction_Active (No_Dispatching_Calls) - or else not Is_Limited_Type (Typ) - or else not Has_Interfaces (Typ) - or else not RTE_Record_Component_Available (RE_OSD_Table) - then - -- No OSD table required - - return Make_Null (Loc); - - else - OSD_Aggr_List := New_List; - - declare - Prim_Table : array (Nat range 1 .. Nb_Prim) of Entity_Id; - Prim : Entity_Id; - Prim_Alias : Entity_Id; - Prim_Elmt : Elmt_Id; - E : Entity_Id; - Count : Nat := 0; - Pos : Nat; - - begin - Prim_Table := (others => Empty); - Prim_Alias := Empty; - - Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); - while Present (Prim_Elmt) loop - Prim := Node (Prim_Elmt); - - if Present (Interface_Alias (Prim)) - and then Find_Dispatching_Type - (Interface_Alias (Prim)) = Iface - then - Prim_Alias := Interface_Alias (Prim); - E := Ultimate_Alias (Prim); - Pos := UI_To_Int (DT_Position (Prim_Alias)); - - if Present (Prim_Table (Pos)) then - pragma Assert (Prim_Table (Pos) = E); - null; - - else - Prim_Table (Pos) := E; - - Append_To (OSD_Aggr_List, - Make_Component_Association (Loc, - Choices => New_List ( - Make_Integer_Literal (Loc, - DT_Position (Prim_Alias))), - Expression => - Make_Integer_Literal (Loc, - DT_Position (Alias (Prim))))); - - Count := Count + 1; - end if; - end if; - - Next_Elmt (Prim_Elmt); - end loop; - - pragma Assert (Count = Nb_Prim); - end; - - OSD := Make_Temporary (Loc, 'I'); - - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => OSD, - Aliased_Present => True, - Constant_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => - New_Occurrence_Of (RTE (RE_Object_Specific_Data), Loc), - Constraint => - Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => New_List ( - Make_Integer_Literal (Loc, Nb_Prim)))), - - Expression => - Make_Aggregate (Loc, - Component_Associations => New_List ( - Make_Component_Association (Loc, - Choices => New_List ( - New_Occurrence_Of - (RTE_Record_Component (RE_OSD_Num_Prims), Loc)), - Expression => - Make_Integer_Literal (Loc, Nb_Prim)), - - Make_Component_Association (Loc, - Choices => New_List ( - New_Occurrence_Of - (RTE_Record_Component (RE_OSD_Table), Loc)), - Expression => Make_Aggregate (Loc, - Component_Associations => OSD_Aggr_List)))))); - - return - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (OSD, Loc), - Attribute_Name => Name_Unchecked_Access); - end if; - end Make_OSD; - - -- Local variables - - Nb_Prim : constant Nat := Count_Primitives (Typ); - AI : Elmt_Id; - I_Depth : Nat; - Iface_Table_Node : Node_Id; - Num_Ifaces : Nat; - TSD_Aggr_List : List_Id; - Typ_Ifaces : Elist_Id; - TSD_Tags_List : List_Id; - - Tname : constant Name_Id := Chars (Typ); - Name_SSD : constant Name_Id := - New_External_Name (Tname, 'S', Suffix_Index => -1); - Name_TSD : constant Name_Id := - New_External_Name (Tname, 'B', Suffix_Index => -1); - SSD : constant Entity_Id := - Make_Defining_Identifier (Loc, Name_SSD); - TSD : constant Entity_Id := - Make_Defining_Identifier (Loc, Name_TSD); - begin - -- Generate code to create the storage for the type specific data object - -- with enough space to store the tags of the ancestors plus the tags - -- of all the implemented interfaces (as described in a-tags.ads). - - -- TSD : Type_Specific_Data (I_Depth) := - -- (Idepth => I_Depth, - -- Tag_Kind => , - -- Access_Level => Type_Access_Level (Typ), - -- Alignment => Typ'Alignment, - -- HT_Link => null, - -- Type_Is_Abstract => <>, - -- Type_Is_Library_Level => <>, - -- Interfaces_Table => <> - -- SSD => SSD_Table'Address - -- Tags_Table => (0 => Typ'Tag, - -- 1 => Parent'Tag - -- ...)); - - TSD_Aggr_List := New_List; - - -- Idepth: Count ancestors to compute the inheritance depth. For private - -- extensions, always go to the full view in order to compute the real - -- inheritance depth. - - declare - Current_Typ : Entity_Id; - Parent_Typ : Entity_Id; - - begin - I_Depth := 0; - Current_Typ := Typ; - loop - Parent_Typ := Etype (Current_Typ); - - if Is_Private_Type (Parent_Typ) then - Parent_Typ := Full_View (Base_Type (Parent_Typ)); - end if; - - exit when Parent_Typ = Current_Typ; - - I_Depth := I_Depth + 1; - Current_Typ := Parent_Typ; - end loop; - end; - - -- I_Depth - - Append_To (TSD_Aggr_List, - Make_Integer_Literal (Loc, I_Depth)); - - -- Tag_Kind - - Append_To (TSD_Aggr_List, Tagged_Kind (Typ)); - - -- Access_Level - - Append_To (TSD_Aggr_List, - Make_Integer_Literal (Loc, Type_Access_Level (Typ))); - - -- Alignment - - -- For CPP types we cannot rely on the value of 'Alignment provided - -- by the backend to initialize this TSD field. Why not??? - - if Convention (Typ) = Convention_CPP - or else Is_CPP_Class (Root_Type (Typ)) - then - Append_To (TSD_Aggr_List, - Make_Integer_Literal (Loc, 0)); - else - Append_To (TSD_Aggr_List, - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), - Attribute_Name => Name_Alignment)); - end if; - - -- HT_Link - - Append_To (TSD_Aggr_List, - Make_Null (Loc)); - - -- Type_Is_Abstract (Ada 2012: AI05-0173) - - declare - Type_Is_Abstract : Entity_Id; - - begin - Type_Is_Abstract := - Boolean_Literals (Is_Abstract_Type (Typ)); - - Append_To (TSD_Aggr_List, - New_Occurrence_Of (Type_Is_Abstract, Loc)); - end; - - -- Type_Is_Library_Level - - declare - Type_Is_Library_Level : Entity_Id; - begin - Type_Is_Library_Level := - Boolean_Literals (Is_Library_Level_Entity (Typ)); - Append_To (TSD_Aggr_List, - New_Occurrence_Of (Type_Is_Library_Level, Loc)); - end; - - -- Interfaces_Table (required for AI-405) - - if RTE_Record_Component_Available (RE_Interfaces_Table) then - - -- Count the number of interface types implemented by Typ - - Collect_Interfaces (Typ, Typ_Ifaces); - - Num_Ifaces := 0; - AI := First_Elmt (Typ_Ifaces); - while Present (AI) loop - Num_Ifaces := Num_Ifaces + 1; - Next_Elmt (AI); - end loop; - - if Num_Ifaces = 0 then - Iface_Table_Node := Make_Null (Loc); - - -- Generate the Interface_Table object - - else - declare - TSD_Ifaces_List : constant List_Id := New_List; - Iface : Entity_Id; - ITable : Node_Id; - - begin - AI := First_Elmt (Typ_Ifaces); - while Present (AI) loop - Iface := Node (AI); - - Append_To (TSD_Ifaces_List, - Make_Aggregate (Loc, - Expressions => New_List ( - - -- Iface_Tag - - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Iface, Loc), - Attribute_Name => Name_Tag), - - -- OSD - - Make_OSD (Iface)))); - - Next_Elmt (AI); - end loop; - - ITable := Make_Temporary (Loc, 'I'); - - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => ITable, - Aliased_Present => True, - Constant_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => - New_Occurrence_Of (RTE (RE_Interface_Data), Loc), - Constraint => Make_Index_Or_Discriminant_Constraint - (Loc, - Constraints => New_List ( - Make_Integer_Literal (Loc, Num_Ifaces)))), - - Expression => Make_Aggregate (Loc, - Expressions => New_List ( - Make_Integer_Literal (Loc, Num_Ifaces), - Make_Aggregate (Loc, - Expressions => TSD_Ifaces_List))))); - - Iface_Table_Node := - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (ITable, Loc), - Attribute_Name => Name_Unchecked_Access); - end; - end if; - - Append_To (TSD_Aggr_List, Iface_Table_Node); - end if; - - -- Generate the Select Specific Data table for synchronized types that - -- implement synchronized interfaces. The size of the table is - -- constrained by the number of non-predefined primitive operations. - - if RTE_Record_Component_Available (RE_SSD) then - if Ada_Version >= Ada_2005 - and then Has_DT (Typ) - and then Is_Concurrent_Record_Type (Typ) - and then Has_Interfaces (Typ) - and then Nb_Prim > 0 - and then not Is_Abstract_Type (Typ) - and then not Is_Controlled (Typ) - and then not Restriction_Active (No_Dispatching_Calls) - and then not Restriction_Active (No_Select_Statements) - then - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => SSD, - Aliased_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => New_Occurrence_Of ( - RTE (RE_Select_Specific_Data), Loc), - Constraint => - Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => New_List ( - Make_Integer_Literal (Loc, Nb_Prim)))))); - - -- This table is initialized by Make_Select_Specific_Data_Table, - -- which calls Set_Entry_Index and Set_Prim_Op_Kind. - - Append_To (TSD_Aggr_List, - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (SSD, Loc), - Attribute_Name => Name_Unchecked_Access)); - else - Append_To (TSD_Aggr_List, Make_Null (Loc)); - end if; - end if; - - -- Initialize the table of ancestor tags. In case of interface types - -- this table is not needed. - - TSD_Tags_List := New_List; - - -- Fill position 0 with Typ'Tag - - Append_To (TSD_Tags_List, - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), - Attribute_Name => Name_Tag)); - - -- Fill the rest of the table with the tags of the ancestors - - declare - Current_Typ : Entity_Id; - Parent_Typ : Entity_Id; - Pos : Nat; - - begin - Pos := 1; - Current_Typ := Typ; - - loop - Parent_Typ := Etype (Current_Typ); - - if Is_Private_Type (Parent_Typ) then - Parent_Typ := Full_View (Base_Type (Parent_Typ)); - end if; - - exit when Parent_Typ = Current_Typ; - - Append_To (TSD_Tags_List, - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Parent_Typ, Loc), - Attribute_Name => Name_Tag)); - - Pos := Pos + 1; - Current_Typ := Parent_Typ; - end loop; - - pragma Assert (Pos = I_Depth + 1); - end; - - Append_To (TSD_Aggr_List, - Make_Aggregate (Loc, - Expressions => TSD_Tags_List)); - - -- Build the TSD object - - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => TSD, - Aliased_Present => True, - Constant_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => New_Occurrence_Of ( - RTE (RE_Type_Specific_Data), Loc), - Constraint => - Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => New_List ( - Make_Integer_Literal (Loc, I_Depth)))), - - Expression => Make_Aggregate (Loc, - Expressions => TSD_Aggr_List))); - - -- Generate: - -- Check_TSD (TSD => TSD'Unrestricted_Access); - - if Ada_Version >= Ada_2005 - and then Is_Library_Level_Entity (Typ) - and then RTE_Available (RE_Check_TSD) - and then not Duplicated_Tag_Checks_Suppressed (Typ) - then - Append_To (Result, - Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Check_TSD), Loc), - Parameter_Associations => New_List ( - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (TSD, Loc), - Attribute_Name => Name_Unrestricted_Access)))); - end if; - - -- Generate: - -- Register_TSD (TSD'Unrestricted_Access); - - Append_To (Result, - Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Register_TSD), Loc), - Parameter_Associations => New_List ( - Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (TSD, Loc), - Attribute_Name => Name_Unrestricted_Access)))); - - -- Populate the two auxiliary tables used for dispatching asynchronous, - -- conditional and timed selects for synchronized types that implement - -- a limited interface. Skip this step in Ravenscar profile or when - -- general dispatching is forbidden. - - if Ada_Version >= Ada_2005 - and then Is_Concurrent_Record_Type (Typ) - and then Has_Interfaces (Typ) - and then not Restriction_Active (No_Dispatching_Calls) - and then not Restriction_Active (No_Select_Statements) - then - Append_List_To (Result, - Make_Select_Specific_Data_Table (Typ)); - end if; - - return Result; - end Make_VM_TSD; - ------------------------------------- -- Make_Select_Specific_Data_Table -- ------------------------------------- @@ -7646,7 +7082,6 @@ package body Exp_Disp is begin pragma Assert (not Restriction_Active (No_Dispatching_Calls)); - pragma Assert (VM_Target = No_VM); -- Do not register in the dispatch table eliminated primitives diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads index a1cc11068eb..4ec53e127f7 100644 --- a/gcc/ada/exp_disp.ads +++ b/gcc/ada/exp_disp.ads @@ -346,10 +346,6 @@ package Exp_Disp is -- tagged types this routine imports the forward declaration of the tag -- entity, that will be declared and exported by Make_DT. - function Make_VM_TSD (Typ : Entity_Id) return List_Id; - -- Build the Type Specific Data record associated with tagged type Typ. - -- Invoked only when generating code for VM targets. - function Register_Primitive (Loc : Source_Ptr; Prim : Entity_Id) return List_Id; diff --git a/gcc/ada/exp_intr.adb b/gcc/ada/exp_intr.adb index 8002fef8bc9..282662ba2ca 100644 --- a/gcc/ada/exp_intr.adb +++ b/gcc/ada/exp_intr.adb @@ -55,7 +55,6 @@ with Sinput; use Sinput; with Snames; use Snames; with Stand; use Stand; with Stringt; use Stringt; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; with Urealp; use Urealp; @@ -394,7 +393,8 @@ package body Exp_Intr is Analyze_And_Resolve (N, Etype (Act_Constr)); -- Do not generate a run-time check on the built object if tag - -- checks are suppressed for the result type or VM_Target /= No_VM + -- checks are suppressed for the result type or tagged type expansion + -- is disabled. if Tag_Checks_Suppressed (Etype (Result_Typ)) or else not Tagged_Type_Expansion @@ -1072,14 +1072,6 @@ package body Exp_Intr is Exception_Handlers => New_List ( Build_Exception_Handler (Finalizer_Data))))); - -- For .NET/JVM, detach the object from the containing finalization - -- collection before finalizing it. - - if VM_Target /= No_VM and then Is_Controlled (Desig_T) then - Prepend_To (Final_Code, - Make_Detach_Call (New_Copy_Tree (Arg))); - end if; - -- If aborts are allowed, then the finalization code must be -- protected by an abort defer/undefer pair. diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 4cbb20bcf02..3ac68ec3bc9 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -605,12 +605,6 @@ package body Exp_Util is elsif No_Pool_Assigned (Ptr_Typ) then return; - - -- Access-to-controlled types are not supported on .NET/JVM since - -- these targets cannot support pools and address arithmetic. - - elsif VM_Target /= No_VM then - return; end if; -- The allocation / deallocation of a controlled object must be @@ -1314,7 +1308,7 @@ package body Exp_Util is Expr := Make_Function_Call (Loc, Name => New_Occurrence_Of (Defining_Entity (Fun), Loc)); - if not In_Init_Proc and then VM_Target = No_VM then + if not In_Init_Proc then Set_Uses_Sec_Stack (Defining_Entity (Fun)); end if; end if; @@ -5309,12 +5303,6 @@ package body Exp_Util is T : constant Entity_Id := Etype (N); begin - -- Objects are never unaligned on VMs - - if VM_Target /= No_VM then - return False; - end if; - -- If renamed object, apply test to underlying object if Is_Entity_Name (N) @@ -5833,21 +5821,6 @@ package body Exp_Util is end if; end Is_Volatile_Reference; - -------------------------- - -- Is_VM_By_Copy_Actual -- - -------------------------- - - function Is_VM_By_Copy_Actual (N : Node_Id) return Boolean is - begin - return VM_Target /= No_VM - and then (Nkind (N) = N_Slice - or else - (Nkind (N) = N_Identifier - and then Present (Renamed_Object (Entity (N))) - and then Nkind (Renamed_Object (Entity (N))) = - N_Slice)); - end Is_VM_By_Copy_Actual; - -------------------- -- Kill_Dead_Code -- -------------------- @@ -6652,7 +6625,7 @@ package body Exp_Util is EQ_Typ : Entity_Id := Empty; begin - -- A class-wide equivalent type is not needed when VM_Target + -- A class-wide equivalent type is not needed on VM targets -- because the VM back-ends handle the class-wide object -- initialization itself (and doesn't need or want the -- additional intermediate type to handle the assignment). @@ -6853,13 +6826,10 @@ package body Exp_Util is if Restriction_Active (No_Finalization) then return False; - -- C++, CIL and Java types are not considered controlled. It is assumed - -- that the non-Ada side will handle their clean up. + -- C++ types are not considered controlled. It is assumed that the + -- non-Ada side will handle their clean up. - elsif Convention (T) = Convention_CIL - or else Convention (T) = Convention_CPP - or else Convention (T) = Convention_Java - then + elsif Convention (T) = Convention_CPP then return False; -- Never needs finalization if Disable_Controlled set @@ -8927,7 +8897,7 @@ package body Exp_Util is -- locate here if this node corresponds to a previous invocation of -- Remove_Side_Effects to avoid a never ending loop in the frontend. - elsif VM_Target /= No_VM + elsif not Tagged_Type_Expansion and then not Comes_From_Source (N) and then Nkind (Parent (N)) = N_Object_Renaming_Declaration and then Is_Class_Wide_Type (Typ) diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index a7b942a7569..913c71b97c5 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -719,10 +719,6 @@ package Exp_Util is -- or has Volatile_Components set. A slice of a volatile variable is -- also volatile. - function Is_VM_By_Copy_Actual (N : Node_Id) return Boolean; - -- Returns True if we are compiling on VM targets and N is a node that - -- requires pass-by-copy in these targets. - procedure Kill_Dead_Code (N : Node_Id; Warn : Boolean := False); -- N represents a node for a section of code that is known to be dead. Any -- exception handler references and warning messages relating to this code diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index b2705672cd1..4dcb037de0b 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -2923,7 +2923,6 @@ package body Freeze is and then ((Has_Non_Null_Base_Init_Proc (Etype (E)) and then not No_Initialization (Declaration_Node (E)) - and then not Is_Value_Type (Etype (E)) and then not Initialization_Suppressed (Etype (E))) or else (Needs_Simple_Initialization (Etype (E)) @@ -3126,7 +3125,6 @@ package body Freeze is and then Convention (F_Type) = Convention_Ada and then not Has_Warnings_Off (F_Type) and then not Has_Size_Clause (F_Type) - and then VM_Target = No_VM then Error_Msg_N ("& is an 8-bit Ada Boolean?x?", Formal); @@ -3173,11 +3171,6 @@ package body Freeze is and then Is_Array_Type (F_Type) and then not Is_Constrained (F_Type) and then Warn_On_Export_Import - - -- Exclude VM case, since both .NET and JVM can handle - -- unconstrained arrays without a problem. - - and then VM_Target = No_VM then Error_Msg_Qual_Level := 1; @@ -3295,7 +3288,6 @@ package body Freeze is elsif Root_Type (R_Type) = Standard_Boolean and then Convention (R_Type) = Convention_Ada - and then VM_Target = No_VM and then not Has_Warnings_Off (E) and then not Has_Warnings_Off (R_Type) and then not Has_Size_Clause (R_Type) @@ -3356,11 +3348,6 @@ package body Freeze is and then not Is_Imported (E) - -- Exclude VM case, since both .NET and JVM can handle return - -- of unconstrained arrays without a problem. - - and then VM_Target = No_VM - -- Check that general warning is enabled, and that it is not -- suppressed for this particular case. @@ -5604,7 +5591,6 @@ package body Freeze is while Present (Formal) loop if Ekind (Etype (Formal)) = E_Incomplete_Type and then No (Full_View (Etype (Formal))) - and then not Is_Value_Type (Etype (Formal)) then if Is_Tagged_Type (Etype (Formal)) then null; @@ -7677,11 +7663,6 @@ package body Freeze is -- Warnings (Off) on specific entities here, probably so???) and then Warn_On_Export_Import - - -- Exclude the VM case, since return of unconstrained arrays - -- is properly handled in both the JVM and .NET cases. - - and then VM_Target = No_VM then Error_Msg_N ("?x?foreign convention function& should not return " & diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index b3c85f1f8bc..723096ccc1f 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -64,7 +64,6 @@ with Sinfo; use Sinfo; with Sinput; use Sinput; with Sinput.L; use Sinput.L; with SCIL_LL; use SCIL_LL; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Types; use Types; @@ -459,14 +458,9 @@ begin end if; end if; - -- Qualify all entity names in inner packages, package bodies, etc., - -- except when compiling for the VM back-ends, which depend on having - -- unqualified names in certain cases and handles the generation of - -- qualified names when needed. + -- Qualify all entity names in inner packages, package bodies, etc. - if VM_Target = No_VM then - Exp_Dbug.Qualify_All_Entity_Names; - end if; + Exp_Dbug.Qualify_All_Entity_Names; -- SCIL backend requirement. Check that SCIL nodes associated with -- dispatching calls reference subprogram calls. diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index 662065ed0ee..6b2046ddcd9 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -599,10 +599,9 @@ procedure Gnat1drv is if Debug_Flag_Dot_LL then Back_End_Handles_Limited_Types := True; - -- If no debug flag, usage off for AAMP, VM, SCIL cases + -- If no debug flag, usage off for AAMP, SCIL cases elsif AAMP_On_Target - or else VM_Target /= No_VM or else Generate_SCIL then Back_End_Handles_Limited_Types := False; @@ -633,20 +632,16 @@ procedure Gnat1drv is -- back end some day, it would not be true for this test, but it -- would be non-GCC, so this is a bit troublesome ??? - Front_End_Inlining := VM_Target /= No_VM or else AAMP_On_Target; + Front_End_Inlining := AAMP_On_Target; end if; -- Set back end inlining indication Back_End_Inlining := - -- No back end inlining available for VM targets - - VM_Target = No_VM - -- No back end inlining available on AAMP - and then not AAMP_On_Target + not AAMP_On_Target -- No back end inlining in GNATprove mode, since it just confuses -- the formal verification process. @@ -868,7 +863,7 @@ procedure Gnat1drv is -- back end for component layout where possible) but only for non-GCC -- back ends, as this is done a priori for GCC back ends. - if VM_Target /= No_VM or else AAMP_On_Target then + if AAMP_On_Target then Sem_Ch13.Validate_Independence; end if; @@ -1273,15 +1268,11 @@ begin -- Annotation is suppressed for targets where front-end layout is -- enabled, because the front end determines representations. - -- Annotation is also suppressed in the case of compiling for a VM, - -- since representations are largely symbolic there. - if Back_End_Mode = Declarations_Only and then (not (Back_Annotate_Rep_Info or Generate_SCIL or GNATprove_Mode) or else Main_Kind = N_Subunit - or else Frontend_Layout_On_Target - or else VM_Target /= No_VM) + or else Frontend_Layout_On_Target) then Post_Compilation_Validation_Checks; Errout.Finalize (Last_Call => True); diff --git a/gcc/ada/gnatlink.adb b/gcc/ada/gnatlink.adb index 190aadfb206..c90397de880 100644 --- a/gcc/ada/gnatlink.adb +++ b/gcc/ada/gnatlink.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1601,12 +1601,6 @@ begin Osint.Add_Default_Search_Dirs; Targparm.Get_Target_Parameters; - case VM_Target is - when JVM_Target => Gcc := new String'("jvm-gnatcompile"); - when CLI_Target => Gcc := new String'("dotnet-gnatcompile"); - when No_VM => null; - end case; - -- Compile the bind file with the following switches: -- -gnatA stops reading gnat.adc, since we don't know what @@ -1651,15 +1645,7 @@ begin end if; if Linker_Path = null then - if VM_Target = CLI_Target then - Linker_Path := System.OS_Lib.Locate_Exec_On_Path ("dotnet-ld"); - - if Linker_Path = null then - Exit_With_Error ("Couldn't locate dotnet-ld"); - end if; - else - Linker_Path := Gcc_Path; - end if; + Linker_Path := Gcc_Path; end if; Write_Header; @@ -1986,7 +1972,7 @@ begin J := J + 1; end loop; - if Linker_Path = Gcc_Path and then VM_Target = No_VM then + if Linker_Path = Gcc_Path then -- For systems where the default is to link statically with -- libgcc, if gcc is not called with -shared-libgcc, call it @@ -2091,10 +2077,7 @@ begin Delete (Binder_Ali_File.all & ASCII.NUL); Delete (Binder_Spec_Src_File.all & ASCII.NUL); Delete (Binder_Body_Src_File.all & ASCII.NUL); - - if VM_Target = No_VM then - Delete (Binder_Obj_File.all & ASCII.NUL); - end if; + Delete (Binder_Obj_File.all & ASCII.NUL); end if; Exit_Program (E_Success); diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb index 5a3dcc4d155..dfa1a5bc757 100644 --- a/gcc/ada/lib-writ.adb +++ b/gcc/ada/lib-writ.adb @@ -454,16 +454,7 @@ package body Lib.Writ is not Has_No_Elaboration_Code (Parent (Declaration_Node (Body_Entity (Uent)))))) then - if Convention (Uent) = Convention_CIL then - - -- Special case for generic CIL packages which never have - -- elaboration code - - Write_Info_Str (" NE"); - - else - Write_Info_Str (" EE"); - end if; + Write_Info_Str (" EE"); end if; if Has_No_Elaboration_Code (Unode) then diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index d3324e70c79..67e44e0d245 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -671,12 +671,7 @@ package body Make is -- Compiler, Binder & Linker Data and Subprograms -- ---------------------------------------------------- - Gcc : String_Access := Program_Name ("gcc", "gnatmake"); - Original_Gcc : constant String_Access := Gcc; - -- Original_Gcc is used to check if Gcc has been modified by a switch - -- --GCC=, so that for VM platforms, it is not modified again, as it can - -- result in incorrect error messages if the compiler cannot be found. - + Gcc : String_Access := Program_Name ("gcc", "gnatmake"); Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake"); Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake"); -- Default compiler, binder, linker programs @@ -4861,12 +4856,10 @@ package body Make is end if; -- If the objects were up-to-date check if the executable file is also - -- up-to-date. For now always bind and link on the JVM since there is - -- currently no simple way to check whether objects are up to date wrt - -- the executable. Same in CodePeer mode where there is no executable. + -- up-to-date. For now always bind and link in CodePeer mode where there + -- is no executable. - if Targparm.VM_Target /= JVM_Target - and then not CodePeer_Mode + if not CodePeer_Mode and then First_Compiled_File = No_File then Executable_Stamp := File_Stamp (Executable); @@ -5812,8 +5805,8 @@ package body Make is Finish_Program (Project_Tree, E_Success); else - -- Call Get_Target_Parameters to ensure that VM_Target and - -- AAMP_On_Target get set before calling Usage. + -- Call Get_Target_Parameters to ensure that AAMP_On_Target gets + -- set before calling Usage. Targparm.Get_Target_Parameters; @@ -6027,39 +6020,6 @@ package body Make is Make_Failed ("*** make failed."); end; - -- Special processing for VM targets - - if Targparm.VM_Target /= No_VM then - - -- Set proper processing commands - - case Targparm.VM_Target is - when Targparm.JVM_Target => - - -- Do not check for an object file (".o") when compiling - -- to JVM machine since ".class" files are generated - -- instead. - - Check_Object_Consistency := False; - - -- Do not modify Gcc is --GCC= was specified - - if Gcc = Original_Gcc then - Gcc := new String'("jvm-gnatcompile"); - end if; - - when Targparm.CLI_Target => - -- Do not modify Gcc is --GCC= was specified - - if Gcc = Original_Gcc then - Gcc := new String'("dotnet-gnatcompile"); - end if; - - when Targparm.No_VM => - raise Program_Error; - end case; - end if; - Gcc_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gcc.all); Gnatbind_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatbind.all); Gnatlink_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatlink.all); diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 825929afa42..645c8f0015a 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -1302,7 +1302,6 @@ begin Pragma_Check_Float_Overflow | Pragma_Check_Name | Pragma_Check_Policy | - Pragma_CIL_Constructor | Pragma_Compile_Time_Error | Pragma_Compile_Time_Warning | Pragma_Contract_Cases | @@ -1376,8 +1375,6 @@ begin Pragma_Interrupt_State | Pragma_Interrupt_Priority | Pragma_Invariant | - Pragma_Java_Constructor | - Pragma_Java_Interface | Pragma_Keep_Names | Pragma_License | Pragma_Link_With | diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb index 3915c30e7ed..51b8b67d983 100644 --- a/gcc/ada/repinfo.adb +++ b/gcc/ada/repinfo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -726,16 +726,12 @@ package body Repinfo is Write_Line ("Assembler"); when Convention_C => Write_Line ("C"); - when Convention_CIL => - Write_Line ("CIL"); when Convention_COBOL => Write_Line ("COBOL"); when Convention_CPP => Write_Line ("C++"); when Convention_Fortran => Write_Line ("Fortran"); - when Convention_Java => - Write_Line ("Java"); when Convention_Stdcall => Write_Line ("Stdcall"); when Convention_Stubbed => diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index bc4674a6052..af2b6757875 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -550,7 +550,6 @@ package Rtsfind is RE_Set_Deadline, -- Ada.Dispatching.EDF RE_Code_Loc, -- Ada.Exceptions - RE_Current_Target_Exception, -- Ada.Exceptions (JGNAT use only) RE_Exception_Id, -- Ada.Exceptions RE_Exception_Identity, -- Ada.Exceptions RE_Exception_Information, -- Ada.Exceptions @@ -1596,7 +1595,6 @@ package Rtsfind is RE_Get_Current_Excep, -- System.Soft_Links RE_Get_GNAT_Exception, -- System.Soft_Links RE_Save_Library_Occurrence, -- System.Soft_Links - RE_Update_Exception, -- System.Soft_Links RE_Bits_1, -- System.Unsigned_Types RE_Bits_2, -- System.Unsigned_Types @@ -1783,7 +1781,6 @@ package Rtsfind is RE_Set_Deadline => Ada_Dispatching_EDF, RE_Code_Loc => Ada_Exceptions, - RE_Current_Target_Exception => Ada_Exceptions, -- of JGNAT RE_Exception_Id => Ada_Exceptions, RE_Exception_Identity => Ada_Exceptions, RE_Exception_Information => Ada_Exceptions, @@ -2833,7 +2830,6 @@ package Rtsfind is RE_Get_Current_Excep => System_Soft_Links, RE_Get_GNAT_Exception => System_Soft_Links, RE_Save_Library_Occurrence => System_Soft_Links, - RE_Update_Exception => System_Soft_Links, RE_Bits_1 => System_Unsigned_Types, RE_Bits_2 => System_Unsigned_Types, diff --git a/gcc/ada/s-soflin.adb b/gcc/ada/s-soflin.adb index 2bbc2aa0b36..b3efac83c47 100644 --- a/gcc/ada/s-soflin.adb +++ b/gcc/ada/s-soflin.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -303,13 +303,4 @@ package body System.Soft_Links is null; end Task_Unlock_NT; - ------------------------- - -- Update_Exception_NT -- - ------------------------- - - procedure Update_Exception_NT (X : EO := Current_Target_Exception) is - begin - Ada.Exceptions.Save_Occurrence (NT_TSD.Current_Excep, X); - end Update_Exception_NT; - end System.Soft_Links; diff --git a/gcc/ada/s-soflin.ads b/gcc/ada/s-soflin.ads index f850cd2ffb0..cba89366014 100644 --- a/gcc/ada/s-soflin.ads +++ b/gcc/ada/s-soflin.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -143,12 +143,6 @@ package System.Soft_Links is -- Handle task abort (non-tasking case, does nothing). Currently, no port -- makes use of this, but we retain the interface for possible future use. - procedure Update_Exception_NT (X : EO := Current_Target_Exception); - -- Handle exception setting. This routine is provided for targets that - -- have built-in exception handling such as the Java Virtual Machine. - -- Currently, only JGNAT uses this. See 4jexcept.ads for an explanation on - -- how this routine is used. - function Check_Abort_Status_NT return Integer; -- Returns Boolean'Pos (True) iff abort signal should raise -- Standard'Abort_Signal. @@ -177,9 +171,6 @@ package System.Soft_Links is Abort_Handler : No_Param_Proc := Abort_Handler_NT'Access; -- Handle task abort (task/non-task case as appropriate) - Update_Exception : Special_EO_Call := Update_Exception_NT'Access; - -- Handle exception setting and tasking polling when appropriate - Check_Abort_Status : Get_Integer_Call := Check_Abort_Status_NT'Access; -- Called when Abort_Signal is delivered to the process. Checks to -- see if signal should result in raising Standard'Abort_Signal. diff --git a/gcc/ada/s-tasini.adb b/gcc/ada/s-tasini.adb index 871ab5abcce..dddad762e34 100644 --- a/gcc/ada/s-tasini.adb +++ b/gcc/ada/s-tasini.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -58,7 +58,6 @@ package body System.Tasking.Initialization is package STPO renames System.Task_Primitives.Operations; package SSL renames System.Soft_Links; - package AE renames Ada.Exceptions; use Parameters; use Task_Primitives.Operations; @@ -94,10 +93,6 @@ package body System.Tasking.Initialization is function Get_Current_Excep return SSL.EOA; -- Task-safe version of SSL.Get_Current_Excep - procedure Update_Exception - (X : AE.Exception_Occurrence := SSL.Current_Target_Exception); - -- Handle exception setting and check for pending actions - function Task_Name return String; -- Returns current task's name @@ -371,7 +366,6 @@ package body System.Tasking.Initialization is SSL.Unlock_Task := Task_Unlock'Access; SSL.Check_Abort_Status := Check_Abort_Status'Access; SSL.Task_Name := Task_Name'Access; - SSL.Update_Exception := Update_Exception'Access; SSL.Get_Current_Excep := Get_Current_Excep'Access; -- Initialize the tasking soft links (if not done yet) that are common @@ -709,50 +703,6 @@ package body System.Tasking.Initialization is end if; end Abort_Undefer; - ---------------------- - -- Update_Exception -- - ---------------------- - - -- Call only when holding no locks - - procedure Update_Exception - (X : AE.Exception_Occurrence := SSL.Current_Target_Exception) - is - Self_Id : constant Task_Id := Self; - use Ada.Exceptions; - - begin - Save_Occurrence (Self_Id.Common.Compiler_Data.Current_Excep, X); - - if Self_Id.Deferral_Level = 0 then - if Self_Id.Pending_Action then - Self_Id.Pending_Action := False; - Self_Id.Deferral_Level := Self_Id.Deferral_Level + 1; - - if Single_Lock then - Lock_RTS; - end if; - - Write_Lock (Self_Id); - Self_Id.Pending_Action := False; - Unlock (Self_Id); - - if Single_Lock then - Unlock_RTS; - end if; - - Self_Id.Deferral_Level := Self_Id.Deferral_Level - 1; - - if Self_Id.Pending_ATC_Level < Self_Id.ATC_Nesting_Level then - if not Self_Id.Aborting then - Self_Id.Aborting := True; - raise Standard'Abort_Signal; - end if; - end if; - end if; - end if; - end Update_Exception; - -------------------------- -- Wakeup_Entry_Caller -- -------------------------- diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index f05ad7fdb79..71df079f69c 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -4924,49 +4924,36 @@ package body Sem_Ch13 is -- will be used to represent the biased subtype that reflects -- the biased representation of components. We need the subtype -- to get proper conversions on referencing elements of the - -- array. Note: component size clauses are ignored in VM mode. - - if VM_Target = No_VM then - if Biased then - New_Ctyp := - Make_Defining_Identifier (Loc, - Chars => - New_External_Name (Chars (U_Ent), 'C', 0, 'T')); - - Decl := - Make_Subtype_Declaration (Loc, - Defining_Identifier => New_Ctyp, - Subtype_Indication => - New_Occurrence_Of (Component_Type (Btype), Loc)); - - Set_Parent (Decl, N); - Analyze (Decl, Suppress => All_Checks); - - Set_Has_Delayed_Freeze (New_Ctyp, False); - Set_Esize (New_Ctyp, Csize); - Set_RM_Size (New_Ctyp, Csize); - Init_Alignment (New_Ctyp); - Set_Is_Itype (New_Ctyp, True); - Set_Associated_Node_For_Itype (New_Ctyp, U_Ent); - - Set_Component_Type (Btype, New_Ctyp); - Set_Biased (New_Ctyp, N, "component size clause"); - end if; + -- array. - Set_Component_Size (Btype, Csize); + if Biased then + New_Ctyp := + Make_Defining_Identifier (Loc, + Chars => + New_External_Name (Chars (U_Ent), 'C', 0, 'T')); - -- For VM case, we ignore component size clauses + Decl := + Make_Subtype_Declaration (Loc, + Defining_Identifier => New_Ctyp, + Subtype_Indication => + New_Occurrence_Of (Component_Type (Btype), Loc)); - else - -- Give a warning unless we are in GNAT mode, in which case - -- the warning is suppressed since it is not useful. + Set_Parent (Decl, N); + Analyze (Decl, Suppress => All_Checks); - if not GNAT_Mode then - Error_Msg_N - ("component size ignored in this configuration??", N); - end if; + Set_Has_Delayed_Freeze (New_Ctyp, False); + Set_Esize (New_Ctyp, Csize); + Set_RM_Size (New_Ctyp, Csize); + Init_Alignment (New_Ctyp); + Set_Is_Itype (New_Ctyp, True); + Set_Associated_Node_For_Itype (New_Ctyp, U_Ent); + + Set_Component_Type (Btype, New_Ctyp); + Set_Biased (New_Ctyp, N, "component size clause"); end if; + Set_Component_Size (Btype, Csize); + -- Deal with warning on overridden size if Warn_On_Overridden_Size @@ -5142,12 +5129,6 @@ package body Sem_Ch13 is ("static string required for tag name!", Nam); end if; - if VM_Target /= No_VM then - Error_Msg_Name_1 := Attr; - Error_Msg_N - ("% attribute unsupported in this configuration", Nam); - end if; - if not Is_Library_Level_Entity (U_Ent) then Error_Msg_NE ("??non-unique external tag supplied for &", N, U_Ent); @@ -5463,16 +5444,6 @@ package body Sem_Ch13 is ("size cannot be given for unconstrained array", Nam); elsif Size /= No_Uint then - if VM_Target /= No_VM and then not GNAT_Mode then - - -- Size clause is not handled properly on VM targets. - -- Display a warning unless we are in GNAT mode, in which - -- case this is useless. - - Error_Msg_N - ("size clauses are ignored in this configuration??", N); - end if; - if Is_Type (U_Ent) then Etyp := U_Ent; else @@ -11356,7 +11327,7 @@ package body Sem_Ch13 is Address_Clause_Checks.Init; Unchecked_Conversions.Init; - if VM_Target /= No_VM or else AAMP_On_Target then + if AAMP_On_Target then Independence_Checks.Init; end if; end Initialize; @@ -12412,17 +12383,7 @@ package body Sem_Ch13 is and then Known_Component_Size (T2) and then Component_Size (T1) = Component_Size (T2) then - if VM_Target = No_VM then - return True; - - -- In VM targets the representation of arrays with aliased - -- components differs from arrays with non-aliased components - - else - return Has_Aliased_Components (Base_Type (T1)) - = - Has_Aliased_Components (Base_Type (T2)); - end if; + return True; end if; end if; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 9fec59564bf..fc85a5abfb8 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -3002,10 +3002,9 @@ package body Sem_Ch3 is -- Check runtime support for synchronized interfaces - if VM_Target = No_VM - and then (Is_Task_Interface (T) - or else Is_Protected_Interface (T) - or else Is_Synchronized_Interface (T)) + if (Is_Task_Interface (T) + or else Is_Protected_Interface (T) + or else Is_Synchronized_Interface (T)) and then not RTE_Available (RE_Select_Specific_Data) then Error_Msg_CRT ("synchronized interfaces", T); @@ -10061,7 +10060,6 @@ package body Sem_Ch3 is and then not Is_TSS (Subp, TSS_Stream_Input) and then not Is_TSS (Subp, TSS_Stream_Output) and then not Is_Abstract_Type (T) - and then Convention (T) /= Convention_CIL and then not Is_Predefined_Interface_Primitive (Subp) -- Ada 2005 (AI-251): Do not consider hidden entities associated diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index aaa1fcd1453..d2d5f25f3f3 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -473,7 +473,6 @@ package body Sem_Ch5 is elsif Is_Limited_Type (T1) and then not Assignment_OK (Lhs) and then not Assignment_OK (Original_Node (Lhs)) - and then not Is_Value_Type (T1) then -- CPP constructors can only be called in declarations diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 4ae437ec76d..e942477d3d1 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -83,7 +83,6 @@ with Snames; use Snames; with Stringt; use Stringt; with Style; with Stylesw; use Stylesw; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; with Urealp; use Urealp; @@ -2036,11 +2035,6 @@ package body Sem_Ch6 is end if; if Ekind (Typ) = E_Incomplete_Type - and then Is_Value_Type (Typ) - then - null; - - elsif Ekind (Typ) = E_Incomplete_Type or else (Is_Class_Wide_Type (Typ) and then Ekind (Root_Type (Typ)) = E_Incomplete_Type) then @@ -6931,11 +6925,9 @@ package body Sem_Ch6 is -- Add BIP_Storage_Pool, in case BIP_Alloc_Form indicates to -- use a user-defined pool. This formal is not added on - -- .NET/JVM/ZFP as those targets do not support pools. + -- ZFP as those targets do not support pools. - if VM_Target = No_VM - and then RTE_Available (RE_Root_Storage_Pool_Ptr) - then + if RTE_Available (RE_Root_Storage_Pool_Ptr) then Discard := Add_Extra_Formal (E, RTE (RE_Root_Storage_Pool_Ptr), @@ -10077,11 +10069,6 @@ package body Sem_Ch6 is end if; end if; - -- Special handling of Value_Type for CIL case - - elsif Is_Value_Type (Formal_Type) then - null; - elsif not Nkind_In (Parent (T), N_Access_Function_Definition, N_Access_Procedure_Definition) then diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index a12649e0cf1..b2c6d821d51 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -68,7 +68,6 @@ with Sinfo.CN; use Sinfo.CN; with Snames; use Snames; with Style; use Style; with Table; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; @@ -3909,15 +3908,14 @@ package body Sem_Ch8 is -- type is still not frozen). We exclude from this processing generic -- formal subprograms found in instantiations. - -- We must exclude VM targets and restricted run-time libraries because + -- We must exclude restricted run-time libraries because -- entity AST_Handler is defined in package System.Aux_Dec which is not -- available in those platforms. Note that we cannot use the function -- Restricted_Profile (instead of Configurable_Run_Time_Mode) because -- the ZFP run-time library is not defined as a profile, and we do not -- want to deal with AST_Handler in ZFP mode. - if VM_Target = No_VM - and then not Configurable_Run_Time_Mode + if not Configurable_Run_Time_Mode and then not Present (Corresponding_Formal_Spec (N)) and then Etype (Nam) /= RTE (RE_AST_Handler) then @@ -5606,8 +5604,6 @@ package body Sem_Ch8 is end case; end if; end if; - - Check_Nested_Access (E); end if; Set_Entity_Or_Discriminal (N, E); @@ -6602,13 +6598,9 @@ package body Sem_Ch8 is -- Do not build the subtype when referencing components of -- dispatch table wrappers. Required to avoid generating - -- elaboration code with HI runtimes. JVM and .NET use a - -- modified version of Ada.Tags which does not contain RE_ - -- Dispatch_Table_Wrapper and RE_No_Dispatch_Table_Wrapper. - -- Avoid raising RE_Not_Available exception in those cases. + -- elaboration code with HI runtimes. - elsif VM_Target = No_VM - and then RTU_Loaded (Ada_Tags) + elsif RTU_Loaded (Ada_Tags) and then ((RTE_Available (RE_Dispatch_Table_Wrapper) and then Scope (Selector) = diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index ff112317080..35877e530e1 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -57,7 +57,6 @@ with Snames; use Snames; with Stand; use Stand; with Sinfo; use Sinfo; with Style; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; @@ -2367,12 +2366,6 @@ package body Sem_Ch9 is Generate_Reference (Entry_Id, Entry_Name); if Present (First_Formal (Entry_Id)) then - if VM_Target = JVM_Target then - Error_Msg_N - ("arguments unsupported in requeue statement", - First_Formal (Entry_Id)); - return; - end if; -- Ada 2012 (AI05-0030): Perform type conformance after skipping -- the first parameter of Entry_Id since it is the interface diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index d61976e7cbe..74a315dd3f2 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -50,7 +50,6 @@ with Sem_Type; use Sem_Type; with Sem_Util; use Sem_Util; with Snames; use Snames; with Sinfo; use Sinfo; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Uintp; use Uintp; @@ -1148,7 +1147,7 @@ package body Sem_Disp is -- No code required to register primitives in VM -- targets - elsif VM_Target /= No_VM then + elsif not Tagged_Type_Expansion then null; else @@ -1309,7 +1308,7 @@ package body Sem_Disp is and then Present (Interface_Alias (Prim)) and then Alias (Prim) = Subp and then not Building_Static_DT (Tagged_Type) - and then VM_Target = No_VM + and then Tagged_Type_Expansion then Insert_Actions_After (Subp_Body, Register_Primitive (Sloc (Subp_Body), Prim => Prim)); @@ -2546,7 +2545,7 @@ package body Sem_Disp is Next_Actual (Arg); end loop; - -- Expansion of dispatching calls is suppressed when VM_Target, because + -- Expansion of dispatching calls is suppressed on VM targets, because -- the VM back-ends directly handle the generation of dispatching calls -- and would have to undo any expansion to an indirect call. diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb index d8a4f3e4cca..9f97836477c 100644 --- a/gcc/ada/sem_eval.adb +++ b/gcc/ada/sem_eval.adb @@ -52,7 +52,6 @@ with Sinfo; use Sinfo; with Snames; use Snames; with Stand; use Stand; with Stringt; use Stringt; -with Targparm; use Targparm; with Tbuild; use Tbuild; package body Sem_Eval is @@ -6238,12 +6237,6 @@ package body Sem_Eval is and then Is_Known_Valid (Typ) and then Esize (Etype (N)) <= Esize (Typ) and then not Has_Biased_Representation (Etype (N)) - - -- This check cannot be disabled under VM targets because in some - -- unusual cases the backend of the native compiler raises a run-time - -- exception but the virtual machines do not raise any exception. - - and then VM_Target = No_VM then return In_Range; diff --git a/gcc/ada/sem_mech.adb b/gcc/ada/sem_mech.adb index 2347bff46a0..cfe9f9536c1 100644 --- a/gcc/ada/sem_mech.adb +++ b/gcc/ada/sem_mech.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -181,13 +181,11 @@ package body Sem_Mech is -- C -- ------- - -- Note: Assembler, C++, Java, Stdcall also use C conventions + -- Note: Assembler, C++, Stdcall also use C conventions when Convention_Assembler | Convention_C | - Convention_CIL | Convention_CPP | - Convention_Java | Convention_Stdcall => -- The following values are passed by copy diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 690856163b6..94eac815bdb 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -7738,21 +7738,6 @@ package body Sem_Prag is end if; end loop; - -- When the convention is Java or CIL, we also allow Import to - -- be given for packages, generic packages, exceptions, record - -- components, and access to subprograms. - - elsif (C = Convention_Java or else C = Convention_CIL) - and then - (Is_Package_Or_Generic_Package (Def_Id) - or else Ekind (Def_Id) = E_Exception - or else Ekind (Def_Id) = E_Access_Subprogram_Type - or else Nkind (Parent (Def_Id)) = N_Component_Declaration) - then - Set_Imported (Def_Id); - Set_Is_Public (Def_Id); - Process_Interface_Name (Def_Id, Arg3, Arg4); - -- Import a CPP class elsif C = Convention_CPP @@ -8254,23 +8239,17 @@ package body Sem_Prag is Link_Nam : Node_Id; String_Val : String_Id; - procedure Check_Form_Of_Interface_Name - (SN : Node_Id; - Ext_Name_Case : Boolean); + procedure Check_Form_Of_Interface_Name (SN : Node_Id); -- SN is a string literal node for an interface name. This routine -- performs some minimal checks that the name is reasonable. In -- particular that no spaces or other obviously incorrect characters -- appear. This is only a warning, since any characters are allowed. - -- Ext_Name_Case is True for an External_Name, False for a Link_Name. ---------------------------------- -- Check_Form_Of_Interface_Name -- ---------------------------------- - procedure Check_Form_Of_Interface_Name - (SN : Node_Id; - Ext_Name_Case : Boolean) - is + procedure Check_Form_Of_Interface_Name (SN : Node_Id) is S : constant String_Id := Strval (Expr_Value_S (SN)); SL : constant Nat := String_Length (S); C : Char_Code; @@ -8288,21 +8267,12 @@ package body Sem_Prag is if not In_Character_Range (C) - -- For all cases except CLI target, - -- commas, spaces and slashes are dubious (in CLI, we use - -- commas and backslashes in external names to specify - -- assembly version and public key, while slashes and spaces - -- can be used in names to mark nested classes and - -- valuetypes). - - or else ((not Ext_Name_Case or else VM_Target /= CLI_Target) - and then (Get_Character (C) = ',' - or else - Get_Character (C) = '\')) - or else (VM_Target /= CLI_Target - and then (Get_Character (C) = ' ' - or else - Get_Character (C) = '/')) + -- Commas, spaces and (back)slashes are dubious + + or else Get_Character (C) = ',' + or else Get_Character (C) = '\' + or else Get_Character (C) = ' ' + or else Get_Character (C) = '/' then Error_Msg ("??interface name contains illegal character", @@ -8316,18 +8286,6 @@ package body Sem_Prag is begin if No (Link_Arg) then if No (Ext_Arg) then - if VM_Target = CLI_Target - and then Ekind (Subprogram_Def) = E_Package - and then Nkind (Parent (Subprogram_Def)) = - N_Package_Specification - and then Present (Generic_Parent (Parent (Subprogram_Def))) - then - Set_Interface_Name - (Subprogram_Def, - Interface_Name - (Generic_Parent (Parent (Subprogram_Def)))); - end if; - return; elsif Chars (Ext_Arg) = Name_Link_Name then @@ -8351,7 +8309,7 @@ package body Sem_Prag is if Present (Ext_Nam) then Check_Arg_Is_OK_Static_Expression (Ext_Nam, Standard_String); - Check_Form_Of_Interface_Name (Ext_Nam, Ext_Name_Case => True); + Check_Form_Of_Interface_Name (Ext_Nam); -- Verify that external name is not the name of a local entity, -- which would hide the imported one and could lead to run-time @@ -8396,7 +8354,7 @@ package body Sem_Prag is if Present (Link_Nam) then Check_Arg_Is_OK_Static_Expression (Link_Nam, Standard_String); - Check_Form_Of_Interface_Name (Link_Nam, Ext_Name_Case => False); + Check_Form_Of_Interface_Name (Link_Nam); end if; -- If there is no link name, just set the external name @@ -8412,11 +8370,7 @@ package body Sem_Prag is else Start_String; - - if VM_Target = No_VM then - Store_String_Char (Get_Char_Code ('*')); - end if; - + Store_String_Char (Get_Char_Code ('*')); String_Val := Strval (Expr_Value_S (Link_Nam)); Store_String_Chars (String_Val); Link_Nam := @@ -8435,16 +8389,7 @@ package body Sem_Prag is (Get_Base_Subprogram (Subprogram_Def), Link_Nam); end if; - -- We allow duplicated export names in CIL/Java, as they are always - -- enclosed in a namespace that differentiates them, and overloaded - -- entities are supported by the VM. - - if Convention (Subprogram_Def) /= Convention_CIL - and then - Convention (Subprogram_Def) /= Convention_Java - then - Check_Duplicated_Export_Name (Link_Nam); - end if; + Check_Duplicated_Export_Name (Link_Nam); end Process_Interface_Name; ----------------------------------------- @@ -9012,7 +8957,7 @@ package body Sem_Prag is begin -- For GCC back ends the validation is done a priori - if VM_Target = No_VM and then not AAMP_On_Target then + if not AAMP_On_Target then return; end if; @@ -11936,14 +11881,6 @@ package body Sem_Prag is end if; end Check_Policy; - --------------------- - -- CIL_Constructor -- - --------------------- - - -- pragma CIL_Constructor ([Entity =>] LOCAL_NAME); - - -- Processing for this pragma is shared with Java_Constructor - ------------- -- Comment -- ------------- @@ -15774,328 +15711,6 @@ package body Sem_Prag is end if; end Invariant; - ---------------------- - -- Java_Constructor -- - ---------------------- - - -- pragma Java_Constructor ([Entity =>] LOCAL_NAME); - - -- Also handles pragma CIL_Constructor - - when Pragma_CIL_Constructor | Pragma_Java_Constructor => - Java_Constructor : declare - Convention : Convention_Id; - Def_Id : Entity_Id; - Hom_Id : Entity_Id; - Id : Entity_Id; - This_Formal : Entity_Id; - - begin - GNAT_Pragma; - Check_Arg_Count (1); - Check_Optional_Identifier (Arg1, Name_Entity); - Check_Arg_Is_Local_Name (Arg1); - - Id := Get_Pragma_Arg (Arg1); - Find_Program_Unit_Name (Id); - - -- If we did not find the name, we are done - - if Etype (Id) = Any_Type then - return; - end if; - - -- Check wrong use of pragma in wrong VM target - - if VM_Target = No_VM then - return; - - elsif VM_Target = CLI_Target - and then Prag_Id = Pragma_Java_Constructor - then - Error_Pragma ("must use pragma 'C'I'L_'Constructor"); - - elsif VM_Target = JVM_Target - and then Prag_Id = Pragma_CIL_Constructor - then - Error_Pragma ("must use pragma 'Java_'Constructor"); - end if; - - case Prag_Id is - when Pragma_CIL_Constructor => Convention := Convention_CIL; - when Pragma_Java_Constructor => Convention := Convention_Java; - when others => null; - end case; - - Hom_Id := Entity (Id); - - -- Loop through homonyms - - loop - Def_Id := Get_Base_Subprogram (Hom_Id); - - -- The constructor is required to be a function - - if Ekind (Def_Id) /= E_Function then - if VM_Target = JVM_Target then - Error_Pragma_Arg - ("pragma% requires function returning a 'Java access " - & "type", Def_Id); - else - Error_Pragma_Arg - ("pragma% requires function returning a 'C'I'L access " - & "type", Def_Id); - end if; - end if; - - -- Check arguments: For tagged type the first formal must be - -- named "this" and its type must be a named access type - -- designating a class-wide tagged type that has convention - -- CIL/Java. The first formal must also have a null default - -- value. For example: - - -- type Typ is tagged ... - -- type Ref is access all Typ; - -- pragma Convention (CIL, Typ); - - -- function New_Typ (This : Ref) return Ref; - -- function New_Typ (This : Ref; I : Integer) return Ref; - -- pragma Cil_Constructor (New_Typ); - - -- Reason: The first formal must NOT be a primitive of the - -- tagged type. - - -- This rule also applies to constructors of delegates used - -- to interface with standard target libraries. For example: - - -- type Delegate is access procedure ... - -- pragma Import (CIL, Delegate, ...); - - -- function new_Delegate - -- (This : Delegate := null; ... ) return Delegate; - - -- For value-types this rule does not apply. - - if not Is_Value_Type (Etype (Def_Id)) then - if No (First_Formal (Def_Id)) then - Error_Msg_Name_1 := Pname; - Error_Msg_N ("% function must have parameters", Def_Id); - return; - end if; - - -- In the JRE library we have several occurrences in which - -- the "this" parameter is not the first formal. - - This_Formal := First_Formal (Def_Id); - - -- In the JRE library we have several occurrences in which - -- the "this" parameter is not the first formal. Search for - -- it. - - if VM_Target = JVM_Target then - while Present (This_Formal) - and then Get_Name_String (Chars (This_Formal)) /= "this" - loop - Next_Formal (This_Formal); - end loop; - - if No (This_Formal) then - This_Formal := First_Formal (Def_Id); - end if; - end if; - - -- Warning: The first parameter should be named "this". - -- We temporarily allow it because we have the following - -- case in the Java runtime (file s-osinte.ads) ??? - - -- function new_Thread - -- (Self_Id : System.Address) return Thread_Id; - -- pragma Java_Constructor (new_Thread); - - if VM_Target = JVM_Target - and then Get_Name_String (Chars (First_Formal (Def_Id))) - = "self_id" - and then Etype (First_Formal (Def_Id)) = RTE (RE_Address) - then - null; - - elsif Get_Name_String (Chars (This_Formal)) /= "this" then - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("first formal of % function must be named `this`", - Parent (This_Formal)); - - elsif not Is_Access_Type (Etype (This_Formal)) then - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("first formal of % function must be an access type", - Parameter_Type (Parent (This_Formal))); - - -- For delegates the type of the first formal must be a - -- named access-to-subprogram type (see previous example) - - elsif Ekind (Etype (Def_Id)) = E_Access_Subprogram_Type - and then Ekind (Etype (This_Formal)) - /= E_Access_Subprogram_Type - then - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("first formal of % function must be a named access " - & "to subprogram type", - Parameter_Type (Parent (This_Formal))); - - -- Warning: We should reject anonymous access types because - -- the constructor must not be handled as a primitive of the - -- tagged type. We temporarily allow it because this profile - -- is currently generated by cil2ada??? - - elsif Ekind (Etype (Def_Id)) /= E_Access_Subprogram_Type - and then not Ekind_In (Etype (This_Formal), - E_Access_Type, - E_General_Access_Type, - E_Anonymous_Access_Type) - then - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("first formal of % function must be a named access " - & "type", Parameter_Type (Parent (This_Formal))); - - elsif Atree.Convention - (Designated_Type (Etype (This_Formal))) /= Convention - then - Error_Msg_Name_1 := Pname; - - if Convention = Convention_Java then - Error_Msg_N - ("pragma% requires convention 'Cil in designated " - & "type", Parameter_Type (Parent (This_Formal))); - else - Error_Msg_N - ("pragma% requires convention 'Java in designated " - & "type", Parameter_Type (Parent (This_Formal))); - end if; - - elsif No (Expression (Parent (This_Formal))) - or else Nkind (Expression (Parent (This_Formal))) /= N_Null - then - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma% requires first formal with default `null`", - Parameter_Type (Parent (This_Formal))); - end if; - end if; - - -- Check result type: the constructor must be a function - -- returning: - -- * a value type (only allowed in the CIL compiler) - -- * an access-to-subprogram type with convention Java/CIL - -- * an access-type designating a type that has convention - -- Java/CIL. - - if Is_Value_Type (Etype (Def_Id)) then - null; - - -- Access-to-subprogram type with convention Java/CIL - - elsif Ekind (Etype (Def_Id)) = E_Access_Subprogram_Type then - if Atree.Convention (Etype (Def_Id)) /= Convention then - if Convention = Convention_Java then - Error_Pragma_Arg - ("pragma% requires function returning a 'Java " - & "access type", Arg1); - else - pragma Assert (Convention = Convention_CIL); - Error_Pragma_Arg - ("pragma% requires function returning a 'C'I'L " - & "access type", Arg1); - end if; - end if; - - elsif Is_Access_Type (Etype (Def_Id)) then - if not Ekind_In (Etype (Def_Id), E_Access_Type, - E_General_Access_Type) - or else - Atree.Convention - (Designated_Type (Etype (Def_Id))) /= Convention - then - Error_Msg_Name_1 := Pname; - - if Convention = Convention_Java then - Error_Pragma_Arg - ("pragma% requires function returning a named " - & "'Java access type", Arg1); - else - Error_Pragma_Arg - ("pragma% requires function returning a named " - & "'C'I'L access type", Arg1); - end if; - end if; - end if; - - Set_Is_Constructor (Def_Id); - Set_Convention (Def_Id, Convention); - Set_Is_Imported (Def_Id); - - exit when From_Aspect_Specification (N); - Hom_Id := Homonym (Hom_Id); - - exit when No (Hom_Id) or else Scope (Hom_Id) /= Current_Scope; - end loop; - end Java_Constructor; - - ---------------------- - -- Java_Interface -- - ---------------------- - - -- pragma Java_Interface ([Entity =>] LOCAL_NAME); - - when Pragma_Java_Interface => Java_Interface : declare - Arg : Node_Id; - Typ : Entity_Id; - - begin - GNAT_Pragma; - Check_Arg_Count (1); - Check_Optional_Identifier (Arg1, Name_Entity); - Check_Arg_Is_Local_Name (Arg1); - - Arg := Get_Pragma_Arg (Arg1); - Analyze (Arg); - - if Etype (Arg) = Any_Type then - return; - end if; - - if not Is_Entity_Name (Arg) - or else not Is_Type (Entity (Arg)) - then - Error_Pragma_Arg ("pragma% requires a type mark", Arg1); - end if; - - Typ := Underlying_Type (Entity (Arg)); - - -- For now simply check some of the semantic constraints on the - -- type. This currently leaves out some restrictions on interface - -- types, namely that the parent type must be java.lang.Object.Typ - -- and that all primitives of the type should be declared - -- abstract. ??? - - if not Is_Tagged_Type (Typ) or else not Is_Abstract_Type (Typ) then - Error_Pragma_Arg - ("pragma% requires an abstract tagged type", Arg1); - - elsif not Has_Discriminants (Typ) - or else Ekind (Etype (First_Discriminant (Typ))) - /= E_Anonymous_Access_Type - or else - not Is_Class_Wide_Type - (Designated_Type (Etype (First_Discriminant (Typ)))) - then - Error_Pragma_Arg - ("type must have a class-wide access discriminant", Arg1); - end if; - end Java_Interface; - ---------------- -- Keep_Names -- ---------------- @@ -17634,18 +17249,6 @@ package body Sem_Prag is if CodePeer_Mode then null; - -- Don't attempt any packing for VM targets. We possibly - -- could deal with some cases of array bit-packing, but we - -- don't bother, since this is not a typical kind of - -- representation in the VM context anyway (and would not - -- for example work nicely with the debugger). - - elsif VM_Target /= No_VM then - if not GNAT_Mode then - Error_Pragma - ("??pragma% ignored in this configuration"); - end if; - -- Normal case where we do the pack action else @@ -17662,23 +17265,9 @@ package body Sem_Prag is else pragma Assert (Is_Record_Type (Typ)); if not Rep_Item_Too_Late (Typ, N) then - - -- Ignore pack request with warning in VM mode (skip warning - -- if we are compiling GNAT run time library). - - if VM_Target /= No_VM then - if not GNAT_Mode then - Error_Pragma - ("??pragma% ignored in this configuration"); - end if; - - -- Normal case of pack request active - - else - Set_Is_Packed (Base_Type (Typ)); - Set_Has_Pragma_Pack (Base_Type (Typ)); - Set_Has_Non_Standard_Rep (Base_Type (Typ)); - end if; + Set_Is_Packed (Base_Type (Typ)); + Set_Has_Pragma_Pack (Base_Type (Typ)); + Set_Has_Non_Standard_Rep (Base_Type (Typ)); end if; end if; end Pack; @@ -26619,7 +26208,6 @@ package body Sem_Prag is Pragma_Check_Float_Overflow => 0, Pragma_Check_Name => 0, Pragma_Check_Policy => 0, - Pragma_CIL_Constructor => 0, Pragma_CPP_Class => 0, Pragma_CPP_Constructor => 0, Pragma_CPP_Virtual => 0, @@ -26698,8 +26286,6 @@ package body Sem_Prag is Pragma_Interrupt_Priority => -1, Pragma_Interrupt_State => -1, Pragma_Invariant => -1, - Pragma_Java_Constructor => -1, - Pragma_Java_Interface => -1, Pragma_Keep_Names => 0, Pragma_License => 0, Pragma_Link_With => -1, @@ -27380,12 +26966,11 @@ package body Sem_Prag is begin -- If first character is asterisk, this is a link name, and we leave it -- completely unmodified. We also ignore null strings (the latter case - -- happens only in error cases) and no encoding should occur for Java or - -- AAMP interface names. + -- happens only in error cases) and no encoding should occur for AAMP + -- interface names. if Len = 0 or else Get_String_Char (Str, 1) = Get_Char_Code ('*') - or else VM_Target /= No_VM or else AAMP_On_Target then Set_Interface_Name (E, S); diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb index 785121adf24..06833fd9957 100644 --- a/gcc/ada/sem_type.adb +++ b/gcc/ada/sem_type.adb @@ -1728,18 +1728,6 @@ package body Sem_Type is end if; end if; - -- Check for overloaded CIL convention stuff because the CIL libraries - -- do sick things like Console.Write_Line where it matches two different - -- overloads, so just pick the first ??? - - if Convention (Nam1) = Convention_CIL - and then Convention (Nam2) = Convention_CIL - and then Ekind (Nam1) = Ekind (Nam2) - and then Ekind_In (Nam1, E_Procedure, E_Function) - then - return It2; - end if; - -- If the context is universal, the predefined operator is preferred. -- This includes bounds in numeric type declarations, and expressions -- in type conversions. If no interpretation yields a universal type, diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 2e7064b0ef0..3295ea3d09f 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -3051,48 +3051,6 @@ package body Sem_Util is end loop Outer; end Check_Later_Vs_Basic_Declarations; - ------------------------- - -- Check_Nested_Access -- - ------------------------- - - procedure Check_Nested_Access (Ent : Entity_Id) is - Scop : constant Entity_Id := Current_Scope; - Current_Subp : Entity_Id; - Enclosing : Entity_Id; - - begin - -- Currently only enabled for VM back-ends for efficiency - - if VM_Target /= No_VM - and then Ekind_In (Ent, E_Variable, E_Constant, E_Loop_Parameter) - and then Scope (Ent) /= Empty - and then not Is_Library_Level_Entity (Ent) - - -- Comment the exclusion of imported entities ??? - - and then not Is_Imported (Ent) - then - -- Get current subprogram that is relevant - - if Is_Subprogram (Scop) - or else Is_Generic_Subprogram (Scop) - or else Is_Entry (Scop) - then - Current_Subp := Scop; - else - Current_Subp := Current_Subprogram; - end if; - - Enclosing := Enclosing_Subprogram (Ent); - - -- Set flag if uplevel reference - - if Enclosing /= Empty and then Enclosing /= Current_Subp then - Set_Has_Uplevel_Reference (Ent, True); - end if; - end if; - end Check_Nested_Access; - --------------------------- -- Check_No_Hidden_State -- --------------------------- @@ -11108,54 +11066,6 @@ package body Sem_Util is end case; end Is_Declaration; - ----------------- - -- Is_Delegate -- - ----------------- - - function Is_Delegate (T : Entity_Id) return Boolean is - Desig_Type : Entity_Id; - - begin - if VM_Target /= CLI_Target then - return False; - end if; - - -- Access-to-subprograms are delegates in CIL - - if Ekind (T) = E_Access_Subprogram_Type then - return True; - end if; - - if not Is_Access_Type (T) then - - -- A delegate is a managed pointer. If no designated type is defined - -- it means that it's not a delegate. - - return False; - end if; - - Desig_Type := Etype (Directly_Designated_Type (T)); - - if not Is_Tagged_Type (Desig_Type) then - return False; - end if; - - -- Test if the type is inherited from [mscorlib]System.Delegate - - while Etype (Desig_Type) /= Desig_Type loop - if Chars (Scope (Desig_Type)) /= No_Name - and then Is_Imported (Scope (Desig_Type)) - and then Get_Name_String (Chars (Scope (Desig_Type))) = "delegate" - then - return True; - end if; - - Desig_Type := Etype (Desig_Type); - end loop; - - return False; - end Is_Delegate; - ---------------------------------------------- -- Is_Dependent_Component_Of_Mutable_Object -- ---------------------------------------------- @@ -13252,18 +13162,6 @@ package body Sem_Util is return T = Universal_Integer or else T = Universal_Real; end Is_Universal_Numeric_Type; - ------------------- - -- Is_Value_Type -- - ------------------- - - function Is_Value_Type (T : Entity_Id) return Boolean is - begin - return VM_Target = CLI_Target - and then Nkind (T) in N_Has_Chars - and then Chars (T) /= No_Name - and then Get_Name_String (Chars (T)) = "valuetype"; - end Is_Value_Type; - ---------------------------- -- Is_Variable_Size_Array -- ---------------------------- @@ -15856,8 +15754,6 @@ package body Sem_Util is end; end if; end if; - - Check_Nested_Access (Ent); end if; Kill_Checks (Ent); @@ -17023,7 +16919,7 @@ package body Sem_Util is -- type temporaries need finalization. elsif Is_Tagged_Type (Typ) or else Has_Controlled_Component (Typ) then - return not Is_Value_Type (Typ); + return True; -- Record type @@ -17235,7 +17131,7 @@ package body Sem_Util is -- since they can't be called via dispatching. elsif Is_Tagged_Type (Typ) or else Has_Controlled_Component (Typ) then - return not Is_Value_Type (Typ); + return True; -- Untagged definite subtypes are known size. This includes all -- elementary [sub]types. Tasks are known size even if they have diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 0ea54daa369..caa35401ee8 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -308,11 +308,6 @@ package Sem_Util is -- remains in the Examiner (JB01-005). Note that the Examiner does not -- count package declarations in later declarative items. - procedure Check_Nested_Access (Ent : Entity_Id); - -- Check whether Ent denotes an entity declared in an uplevel scope, which - -- is accessed inside a nested procedure, and set Has_Uplevel_Reference - -- flag accordingly. This is currently only enabled for if on a VM target. - procedure Check_No_Hidden_State (Id : Entity_Id); -- Determine whether object or state Id introduces a hidden state. If this -- is the case, emit an error. @@ -1256,11 +1251,6 @@ package Sem_Util is function Is_Declaration (N : Node_Id) return Boolean; -- Determine whether arbitrary node N denotes a declaration - function Is_Delegate (T : Entity_Id) return Boolean; - -- Returns true if type T represents a delegate. A Delegate is the CIL - -- object used to represent access-to-subprogram types. This is only - -- relevant to CIL, will always return false for other targets. - function Is_Dependent_Component_Of_Mutable_Object (Object : Node_Id) return Boolean; -- Returns True if Object is the name of a subcomponent that depends on @@ -1528,12 +1518,6 @@ package Sem_Util is pragma Inline (Is_Universal_Numeric_Type); -- True if T is Universal_Integer or Universal_Real - function Is_Value_Type (T : Entity_Id) return Boolean; - -- Returns true if type T represents a value type. This is only relevant to - -- CIL, will always return false for other targets. A value type is a CIL - -- object that is accessed directly, as opposed to the other CIL objects - -- that are accessed through managed pointers. - function Is_Variable_Size_Array (E : Entity_Id) return Boolean; -- Returns true if E has variable size components diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads index 203313d11e6..968d87def2a 100644 --- a/gcc/ada/sinfo.ads +++ b/gcc/ada/sinfo.ads @@ -8098,10 +8098,10 @@ package Sinfo is -- For the case of the standard gigi backend, this means that all -- checks are done in the front end. - -- However, in the case of specialized back-ends, notably the JVM - -- backend for JGNAT, additional requirements and restrictions apply - -- to unchecked conversion, and these are most conveniently performed - -- in the specialized back-end. + -- However, in the case of specialized back-ends, in particular the JVM + -- backend in the past, additional requirements and restrictions may + -- apply to unchecked conversion, and these are most conveniently + -- performed in the specialized back-end. -- To accommodate this requirement, for such back ends, the following -- special node is generated recording an unchecked conversion that diff --git a/gcc/ada/snames.adb-tmpl b/gcc/ada/snames.adb-tmpl index 6e1acd9c22a..3de2b82cc6b 100644 --- a/gcc/ada/snames.adb-tmpl +++ b/gcc/ada/snames.adb-tmpl @@ -152,12 +152,10 @@ package body Snames is Convention_Ada_Pass_By_Reference; when Name_Assembler => return Convention_Assembler; when Name_C => return Convention_C; - when Name_CIL => return Convention_CIL; when Name_COBOL => return Convention_COBOL; when Name_CPP => return Convention_CPP; when Name_Fortran => return Convention_Fortran; when Name_Intrinsic => return Convention_Intrinsic; - when Name_Java => return Convention_Java; when Name_Stdcall => return Convention_Stdcall; when Name_Stubbed => return Convention_Stubbed; @@ -188,13 +186,11 @@ package body Snames is return Name_Ada_Pass_By_Reference; when Convention_Assembler => return Name_Assembler; when Convention_C => return Name_C; - when Convention_CIL => return Name_CIL; when Convention_COBOL => return Name_COBOL; when Convention_CPP => return Name_CPP; when Convention_Entry => return Name_Entry; when Convention_Fortran => return Name_Fortran; when Convention_Intrinsic => return Name_Intrinsic; - when Convention_Java => return Name_Java; when Convention_Protected => return Name_Protected; when Convention_Stdcall => return Name_Stdcall; when Convention_Stubbed => return Name_Stubbed; diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index b76e6295059..de46bdb9316 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -464,7 +464,6 @@ package Snames is Name_Atomic_Components : constant Name_Id := N + $; Name_Attach_Handler : constant Name_Id := N + $; Name_Check : constant Name_Id := N + $; -- GNAT - Name_CIL_Constructor : constant Name_Id := N + $; -- GNAT Name_Comment : constant Name_Id := N + $; -- GNAT Name_Common_Object : constant Name_Id := N + $; -- GNAT Name_Complete_Representation : constant Name_Id := N + $; -- GNAT @@ -533,8 +532,6 @@ package Snames is -- Is_Pragma_Id correctly recognize and process Interrupt_Priority. Name_Invariant : constant Name_Id := N + $; -- GNAT - Name_Java_Constructor : constant Name_Id := N + $; -- GNAT - Name_Java_Interface : constant Name_Id := N + $; -- GNAT Name_Keep_Names : constant Name_Id := N + $; -- GNAT Name_Link_With : constant Name_Id := N + $; -- GNAT Name_Linker_Alias : constant Name_Id := N + $; -- GNAT @@ -651,12 +648,10 @@ package Snames is Name_Ada_Pass_By_Copy : constant Name_Id := N + $; Name_Ada_Pass_By_Reference : constant Name_Id := N + $; Name_Assembler : constant Name_Id := N + $; - Name_CIL : constant Name_Id := N + $; Name_COBOL : constant Name_Id := N + $; Name_CPP : constant Name_Id := N + $; Name_Fortran : constant Name_Id := N + $; Name_Intrinsic : constant Name_Id := N + $; - Name_Java : constant Name_Id := N + $; Name_Stdcall : constant Name_Id := N + $; Name_Stubbed : constant Name_Id := N + $; Last_Convention_Name : constant Name_Id := N + $; @@ -1682,11 +1677,9 @@ package Snames is Convention_Assembler, -- also Asm, Assembly Convention_C, -- also Default, External - Convention_CIL, Convention_COBOL, Convention_CPP, Convention_Fortran, - Convention_Java, Convention_Stdcall); -- also DLL, Win32 -- Note: Convention C_Pass_By_Copy is allowed only for record types @@ -1816,7 +1809,6 @@ package Snames is Pragma_Atomic_Components, Pragma_Attach_Handler, Pragma_Check, - Pragma_CIL_Constructor, Pragma_Comment, Pragma_Common_Object, Pragma_Complete_Representation, @@ -1866,8 +1858,6 @@ package Snames is Pragma_Interface_Name, Pragma_Interrupt_Handler, Pragma_Invariant, - Pragma_Java_Constructor, - Pragma_Java_Interface, Pragma_Keep_Names, Pragma_Link_With, Pragma_Linker_Alias, diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb index 645193e2459..42696cf0ba2 100644 --- a/gcc/ada/targparm.adb +++ b/gcc/ada/targparm.adb @@ -44,14 +44,12 @@ package body Targparm is BDC, -- Backend_Divide_Checks BOC, -- Backend_Overflow_Checks CLA, -- Command_Line_Args - CLI, -- CLI (.NET) CRT, -- Configurable_Run_Times D32, -- Duration_32_Bits DEN, -- Denorm EXS, -- Exit_Status_Supported FEL, -- Frontend_Layout FFO, -- Fractional_Fixed_Ops - JVM, -- JVM MOV, -- Machine_Overflows MRN, -- Machine_Rounds PAS, -- Preallocated_Stacks @@ -79,14 +77,12 @@ package body Targparm is BDC_Str : aliased constant Source_Buffer := "Backend_Divide_Checks"; BOC_Str : aliased constant Source_Buffer := "Backend_Overflow_Checks"; CLA_Str : aliased constant Source_Buffer := "Command_Line_Args"; - CLI_Str : aliased constant Source_Buffer := "CLI"; CRT_Str : aliased constant Source_Buffer := "Configurable_Run_Time"; D32_Str : aliased constant Source_Buffer := "Duration_32_Bits"; DEN_Str : aliased constant Source_Buffer := "Denorm"; EXS_Str : aliased constant Source_Buffer := "Exit_Status_Supported"; FEL_Str : aliased constant Source_Buffer := "Frontend_Layout"; FFO_Str : aliased constant Source_Buffer := "Fractional_Fixed_Ops"; - JVM_Str : aliased constant Source_Buffer := "JVM"; MOV_Str : aliased constant Source_Buffer := "Machine_Overflows"; MRN_Str : aliased constant Source_Buffer := "Machine_Rounds"; PAS_Str : aliased constant Source_Buffer := "Preallocated_Stacks"; @@ -114,14 +110,12 @@ package body Targparm is BDC_Str'Access, BOC_Str'Access, CLA_Str'Access, - CLI_Str'Access, CRT_Str'Access, D32_Str'Access, DEN_Str'Access, EXS_Str'Access, FEL_Str'Access, FFO_Str'Access, - JVM_Str'Access, MOV_Str'Access, MRN_Str'Access, PAS_Str'Access, @@ -794,33 +788,12 @@ package body Targparm is when BDC => Backend_Divide_Checks_On_Target := Result; when BOC => Backend_Overflow_Checks_On_Target := Result; when CLA => Command_Line_Args_On_Target := Result; - when CLI => - if Result then - VM_Target := CLI_Target; - Tagged_Type_Expansion := False; - end if; - -- This is wrong, this processing should be done in - -- Gnat1drv.Adjust_Global_Switches. It is not the - -- right level for targparm to know about tagged - -- type extension??? - when CRT => Configurable_Run_Time_On_Target := Result; when D32 => Duration_32_Bits_On_Target := Result; when DEN => Denorm_On_Target := Result; when EXS => Exit_Status_Supported_On_Target := Result; when FEL => Frontend_Layout_On_Target := Result; when FFO => Fractional_Fixed_Ops_On_Target := Result; - - when JVM => - if Result then - VM_Target := JVM_Target; - Tagged_Type_Expansion := False; - end if; - -- This is wrong, this processing should be done in - -- Gnat1drv.Adjust_Global_Switches. It is not the - -- right level for targparm to know about tagged - -- type extension??? - when MOV => Machine_Overflows_On_Target := Result; when MRN => Machine_Rounds_On_Target := Result; when PAS => Preallocated_Stacks_On_Target := Result; diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads index a1b766153ee..21780d1b12c 100644 --- a/gcc/ada/targparm.ads +++ b/gcc/ada/targparm.ads @@ -203,13 +203,6 @@ package Targparm is AAMP_On_Target : Boolean := False; -- Set to True if target is AAMP - type Virtual_Machine_Kind is (No_VM, JVM_Target, CLI_Target); - VM_Target : Virtual_Machine_Kind := No_VM; - -- Kind of virtual machine targetted - -- No_VM: no virtual machine, default case of a standard processor - -- JVM_Target: Java Virtual Machine - -- CLI_Target: CLI/.NET Virtual Machine - ------------------------------- -- Backend Arithmetic Checks -- ------------------------------- diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads index ed3eac1d43c..dc37f152e76 100644 --- a/gcc/ada/types.ads +++ b/gcc/ada/types.ads @@ -827,9 +827,8 @@ package Types is -- To add a new code, you need to do the following: -- 1. Assign a new number to the reason. Do not renumber existing codes, - -- since this causes compatibility/bootstrap issues, and problems in - -- the CIL/JVM backends. So always add the new code at the end of the - -- list. + -- since this causes compatibility/bootstrap issues, so always add the + -- new code at the end of the list. -- 2. Update the contents of the array Kind diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index 803c44d7a51..b18d542f009 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -91,9 +91,9 @@ begin Write_Eol; - -- Common GCC switches not available for JVM, .NET, and AAMP targets + -- Common GCC switches not available for AAMP targets - if VM_Target = No_VM and then not AAMP_On_Target then + if not AAMP_On_Target then Write_Switch_Char ("fstack-check ", ""); Write_Line ("Generate stack checking code"); -- 2.30.2