Commit 4da17013 by Arnaud Charlet

[multiple changes]

2009-04-08  Vincent Celier  <celier@adacore.com>

	* snames.adb, snames.ads: Add new standard names IDE and
	Compiler_Command.

2009-04-08  Ed Schonberg  <schonberg@adacore.com>

	* exp_util.adb (Safe_Unchecked_Type_Conversion): Conversion is safe,
	i.e. does not need a temporary to capture the value, if expression is
	an acceess type, even if target type is a record whose size may not
	have been determined yet.

	* exp_disp.adb (Expand_Dispatching_Call): Set size info for generated
	access_to_subprogram type, to avoid order-of-elaboration anomalies in
	gigi.

From-SVN: r145743
parent 0c7f5241
...@@ -36,6 +36,7 @@ with Exp_Tss; use Exp_Tss; ...@@ -36,6 +36,7 @@ with Exp_Tss; use Exp_Tss;
with Exp_Util; use Exp_Util; with Exp_Util; use Exp_Util;
with Freeze; use Freeze; with Freeze; use Freeze;
with Itypes; use Itypes; with Itypes; use Itypes;
with Layout; use Layout;
with Nlists; use Nlists; with Nlists; use Nlists;
with Nmake; use Nmake; with Nmake; use Nmake;
with Namet; use Namet; with Namet; use Namet;
...@@ -557,7 +558,7 @@ package body Exp_Disp is ...@@ -557,7 +558,7 @@ package body Exp_Disp is
Res_Typ := Etype (Subp); Res_Typ := Etype (Subp);
end if; end if;
Subp_Typ := Create_Itype (E_Subprogram_Type, Call_Node); Subp_Typ := Create_Itype (E_Subprogram_Type, Call_Node);
Subp_Ptr_Typ := Create_Itype (E_Access_Subprogram_Type, Call_Node); Subp_Ptr_Typ := Create_Itype (E_Access_Subprogram_Type, Call_Node);
Set_Etype (Subp_Typ, Res_Typ); Set_Etype (Subp_Typ, Res_Typ);
Set_Returns_By_Ref (Subp_Typ, Returns_By_Ref (Subp)); Set_Returns_By_Ref (Subp_Typ, Returns_By_Ref (Subp));
...@@ -615,9 +616,14 @@ package body Exp_Disp is ...@@ -615,9 +616,14 @@ package body Exp_Disp is
Create_Extra_Formals (Subp_Typ); Create_Extra_Formals (Subp_Typ);
end; end;
-- Complete description of pointer type, including size information, as
-- must be done with itypes to prevent order-of-elaboration anomalies
-- in gigi.
Set_Etype (Subp_Ptr_Typ, Subp_Ptr_Typ); Set_Etype (Subp_Ptr_Typ, Subp_Ptr_Typ);
Set_Directly_Designated_Type (Subp_Ptr_Typ, Subp_Typ); Set_Directly_Designated_Type (Subp_Ptr_Typ, Subp_Typ);
Set_Convention (Subp_Ptr_Typ, Convention (Subp_Typ)); Set_Convention (Subp_Ptr_Typ, Convention (Subp_Typ));
Layout_Type (Subp_Ptr_Typ);
-- If the controlling argument is a value of type Ada.Tag or an abstract -- If the controlling argument is a value of type Ada.Tag or an abstract
-- interface class-wide type then use it directly. Otherwise, the tag -- interface class-wide type then use it directly. Otherwise, the tag
......
...@@ -4842,6 +4842,14 @@ package body Exp_Util is ...@@ -4842,6 +4842,14 @@ package body Exp_Util is
then then
return True; return True;
-- If the expression has an access type (object or subprogram) we
-- assume that the conversion is safe, because the size of the target
-- is safe, even it is a record (which might be treated as having
-- unknown size at this point).
elsif Is_Access_Type (Ityp) then
return True;
-- If the size of output type is known at compile time, there is -- If the size of output type is known at compile time, there is
-- never a problem. Note that unconstrained records are considered -- never a problem. Note that unconstrained records are considered
-- to be of known size, but we can't consider them that way here, -- to be of known size, but we can't consider them that way here,
......
...@@ -705,6 +705,7 @@ package body Snames is ...@@ -705,6 +705,7 @@ package body Snames is
"builder#" & "builder#" &
"builder_switches#" & "builder_switches#" &
"compiler#" & "compiler#" &
"compiler_command#" &
"compiler_kind#" & "compiler_kind#" &
"config_body_file_name#" & "config_body_file_name#" &
"config_body_file_name_pattern#" & "config_body_file_name_pattern#" &
...@@ -734,6 +735,7 @@ package body Snames is ...@@ -734,6 +735,7 @@ package body Snames is
"global_config_file#" & "global_config_file#" &
"gnatls#" & "gnatls#" &
"gnatstub#" & "gnatstub#" &
"ide#" &
"implementation#" & "implementation#" &
"implementation_exceptions#" & "implementation_exceptions#" &
"implementation_suffix#" & "implementation_suffix#" &
......
...@@ -1029,131 +1029,133 @@ package Snames is ...@@ -1029,131 +1029,133 @@ package Snames is
Name_Builder : constant Name_Id := N + 644; Name_Builder : constant Name_Id := N + 644;
Name_Builder_Switches : constant Name_Id := N + 645; Name_Builder_Switches : constant Name_Id := N + 645;
Name_Compiler : constant Name_Id := N + 646; Name_Compiler : constant Name_Id := N + 646;
Name_Compiler_Kind : constant Name_Id := N + 647; Name_Compiler_Command : constant Name_Id := N + 647;
Name_Config_Body_File_Name : constant Name_Id := N + 648; Name_Compiler_Kind : constant Name_Id := N + 648;
Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 649; Name_Config_Body_File_Name : constant Name_Id := N + 649;
Name_Config_File_Switches : constant Name_Id := N + 650; Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 650;
Name_Config_File_Unique : constant Name_Id := N + 651; Name_Config_File_Switches : constant Name_Id := N + 651;
Name_Config_Spec_File_Name : constant Name_Id := N + 652; Name_Config_File_Unique : constant Name_Id := N + 652;
Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 653; Name_Config_Spec_File_Name : constant Name_Id := N + 653;
Name_Configuration : constant Name_Id := N + 654; Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 654;
Name_Cross_Reference : constant Name_Id := N + 655; Name_Configuration : constant Name_Id := N + 655;
Name_Default_Language : constant Name_Id := N + 656; Name_Cross_Reference : constant Name_Id := N + 656;
Name_Default_Switches : constant Name_Id := N + 657; Name_Default_Language : constant Name_Id := N + 657;
Name_Dependency_Driver : constant Name_Id := N + 658; Name_Default_Switches : constant Name_Id := N + 658;
Name_Dependency_File_Kind : constant Name_Id := N + 659; Name_Dependency_Driver : constant Name_Id := N + 659;
Name_Dependency_Switches : constant Name_Id := N + 660; Name_Dependency_File_Kind : constant Name_Id := N + 660;
Name_Driver : constant Name_Id := N + 661; Name_Dependency_Switches : constant Name_Id := N + 661;
Name_Excluded_Source_Dirs : constant Name_Id := N + 662; Name_Driver : constant Name_Id := N + 662;
Name_Excluded_Source_Files : constant Name_Id := N + 663; Name_Excluded_Source_Dirs : constant Name_Id := N + 663;
Name_Excluded_Source_List_File : constant Name_Id := N + 664; Name_Excluded_Source_Files : constant Name_Id := N + 664;
Name_Exec_Dir : constant Name_Id := N + 665; Name_Excluded_Source_List_File : constant Name_Id := N + 665;
Name_Executable : constant Name_Id := N + 666; Name_Exec_Dir : constant Name_Id := N + 666;
Name_Executable_Suffix : constant Name_Id := N + 667; Name_Executable : constant Name_Id := N + 667;
Name_Extends : constant Name_Id := N + 668; Name_Executable_Suffix : constant Name_Id := N + 668;
Name_Externally_Built : constant Name_Id := N + 669; Name_Extends : constant Name_Id := N + 669;
Name_Finder : constant Name_Id := N + 670; Name_Externally_Built : constant Name_Id := N + 670;
Name_Global_Compilation_Switches : constant Name_Id := N + 671; Name_Finder : constant Name_Id := N + 671;
Name_Global_Configuration_Pragmas : constant Name_Id := N + 672; Name_Global_Compilation_Switches : constant Name_Id := N + 672;
Name_Global_Config_File : constant Name_Id := N + 673; Name_Global_Configuration_Pragmas : constant Name_Id := N + 673;
Name_Gnatls : constant Name_Id := N + 674; Name_Global_Config_File : constant Name_Id := N + 674;
Name_Gnatstub : constant Name_Id := N + 675; Name_Gnatls : constant Name_Id := N + 675;
Name_Implementation : constant Name_Id := N + 676; Name_Gnatstub : constant Name_Id := N + 676;
Name_Implementation_Exceptions : constant Name_Id := N + 677; Name_Ide : constant Name_Id := N + 677;
Name_Implementation_Suffix : constant Name_Id := N + 678; Name_Implementation : constant Name_Id := N + 678;
Name_Include_Switches : constant Name_Id := N + 679; Name_Implementation_Exceptions : constant Name_Id := N + 679;
Name_Include_Path : constant Name_Id := N + 680; Name_Implementation_Suffix : constant Name_Id := N + 680;
Name_Include_Path_File : constant Name_Id := N + 681; Name_Include_Switches : constant Name_Id := N + 681;
Name_Inherit_Source_Path : constant Name_Id := N + 682; Name_Include_Path : constant Name_Id := N + 682;
Name_Language_Kind : constant Name_Id := N + 683; Name_Include_Path_File : constant Name_Id := N + 683;
Name_Language_Processing : constant Name_Id := N + 684; Name_Inherit_Source_Path : constant Name_Id := N + 684;
Name_Languages : constant Name_Id := N + 685; Name_Language_Kind : constant Name_Id := N + 685;
Name_Library : constant Name_Id := N + 686; Name_Language_Processing : constant Name_Id := N + 686;
Name_Library_Ali_Dir : constant Name_Id := N + 687; Name_Languages : constant Name_Id := N + 687;
Name_Library_Auto_Init : constant Name_Id := N + 688; Name_Library : constant Name_Id := N + 688;
Name_Library_Auto_Init_Supported : constant Name_Id := N + 689; Name_Library_Ali_Dir : constant Name_Id := N + 689;
Name_Library_Builder : constant Name_Id := N + 690; Name_Library_Auto_Init : constant Name_Id := N + 690;
Name_Library_Dir : constant Name_Id := N + 691; Name_Library_Auto_Init_Supported : constant Name_Id := N + 691;
Name_Library_GCC : constant Name_Id := N + 692; Name_Library_Builder : constant Name_Id := N + 692;
Name_Library_Interface : constant Name_Id := N + 693; Name_Library_Dir : constant Name_Id := N + 693;
Name_Library_Kind : constant Name_Id := N + 694; Name_Library_GCC : constant Name_Id := N + 694;
Name_Library_Name : constant Name_Id := N + 695; Name_Library_Interface : constant Name_Id := N + 695;
Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 696; Name_Library_Kind : constant Name_Id := N + 696;
Name_Library_Options : constant Name_Id := N + 697; Name_Library_Name : constant Name_Id := N + 697;
Name_Library_Partial_Linker : constant Name_Id := N + 698; Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 698;
Name_Library_Reference_Symbol_File : constant Name_Id := N + 699; Name_Library_Options : constant Name_Id := N + 699;
Name_Library_Src_Dir : constant Name_Id := N + 700; Name_Library_Partial_Linker : constant Name_Id := N + 700;
Name_Library_Support : constant Name_Id := N + 701; Name_Library_Reference_Symbol_File : constant Name_Id := N + 701;
Name_Library_Symbol_File : constant Name_Id := N + 702; Name_Library_Src_Dir : constant Name_Id := N + 702;
Name_Library_Symbol_Policy : constant Name_Id := N + 703; Name_Library_Support : constant Name_Id := N + 703;
Name_Library_Version : constant Name_Id := N + 704; Name_Library_Symbol_File : constant Name_Id := N + 704;
Name_Library_Version_Switches : constant Name_Id := N + 705; Name_Library_Symbol_Policy : constant Name_Id := N + 705;
Name_Linker : constant Name_Id := N + 706; Name_Library_Version : constant Name_Id := N + 706;
Name_Linker_Executable_Option : constant Name_Id := N + 707; Name_Library_Version_Switches : constant Name_Id := N + 707;
Name_Linker_Lib_Dir_Option : constant Name_Id := N + 708; Name_Linker : constant Name_Id := N + 708;
Name_Linker_Lib_Name_Option : constant Name_Id := N + 709; Name_Linker_Executable_Option : constant Name_Id := N + 709;
Name_Local_Config_File : constant Name_Id := N + 710; Name_Linker_Lib_Dir_Option : constant Name_Id := N + 710;
Name_Local_Configuration_Pragmas : constant Name_Id := N + 711; Name_Linker_Lib_Name_Option : constant Name_Id := N + 711;
Name_Locally_Removed_Files : constant Name_Id := N + 712; Name_Local_Config_File : constant Name_Id := N + 712;
Name_Map_File_Option : constant Name_Id := N + 713; Name_Local_Configuration_Pragmas : constant Name_Id := N + 713;
Name_Mapping_File_Switches : constant Name_Id := N + 714; Name_Locally_Removed_Files : constant Name_Id := N + 714;
Name_Mapping_Spec_Suffix : constant Name_Id := N + 715; Name_Map_File_Option : constant Name_Id := N + 715;
Name_Mapping_Body_Suffix : constant Name_Id := N + 716; Name_Mapping_File_Switches : constant Name_Id := N + 716;
Name_Metrics : constant Name_Id := N + 717; Name_Mapping_Spec_Suffix : constant Name_Id := N + 717;
Name_Naming : constant Name_Id := N + 718; Name_Mapping_Body_Suffix : constant Name_Id := N + 718;
Name_Object_Generated : constant Name_Id := N + 719; Name_Metrics : constant Name_Id := N + 719;
Name_Objects_Linked : constant Name_Id := N + 720; Name_Naming : constant Name_Id := N + 720;
Name_Objects_Path : constant Name_Id := N + 721; Name_Object_Generated : constant Name_Id := N + 721;
Name_Objects_Path_File : constant Name_Id := N + 722; Name_Objects_Linked : constant Name_Id := N + 722;
Name_Object_Dir : constant Name_Id := N + 723; Name_Objects_Path : constant Name_Id := N + 723;
Name_Path_Syntax : constant Name_Id := N + 724; Name_Objects_Path_File : constant Name_Id := N + 724;
Name_Pic_Option : constant Name_Id := N + 725; Name_Object_Dir : constant Name_Id := N + 725;
Name_Pretty_Printer : constant Name_Id := N + 726; Name_Path_Syntax : constant Name_Id := N + 726;
Name_Prefix : constant Name_Id := N + 727; Name_Pic_Option : constant Name_Id := N + 727;
Name_Project : constant Name_Id := N + 728; Name_Pretty_Printer : constant Name_Id := N + 728;
Name_Roots : constant Name_Id := N + 729; Name_Prefix : constant Name_Id := N + 729;
Name_Required_Switches : constant Name_Id := N + 730; Name_Project : constant Name_Id := N + 730;
Name_Run_Path_Option : constant Name_Id := N + 731; Name_Roots : constant Name_Id := N + 731;
Name_Runtime_Project : constant Name_Id := N + 732; Name_Required_Switches : constant Name_Id := N + 732;
Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 733; Name_Run_Path_Option : constant Name_Id := N + 733;
Name_Shared_Library_Prefix : constant Name_Id := N + 734; Name_Runtime_Project : constant Name_Id := N + 734;
Name_Shared_Library_Suffix : constant Name_Id := N + 735; Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 735;
Name_Separate_Suffix : constant Name_Id := N + 736; Name_Shared_Library_Prefix : constant Name_Id := N + 736;
Name_Source_Dirs : constant Name_Id := N + 737; Name_Shared_Library_Suffix : constant Name_Id := N + 737;
Name_Source_Files : constant Name_Id := N + 738; Name_Separate_Suffix : constant Name_Id := N + 738;
Name_Source_List_File : constant Name_Id := N + 739; Name_Source_Dirs : constant Name_Id := N + 739;
Name_Spec : constant Name_Id := N + 740; Name_Source_Files : constant Name_Id := N + 740;
Name_Spec_Suffix : constant Name_Id := N + 741; Name_Source_List_File : constant Name_Id := N + 741;
Name_Specification : constant Name_Id := N + 742; Name_Spec : constant Name_Id := N + 742;
Name_Specification_Exceptions : constant Name_Id := N + 743; Name_Spec_Suffix : constant Name_Id := N + 743;
Name_Specification_Suffix : constant Name_Id := N + 744; Name_Specification : constant Name_Id := N + 744;
Name_Stack : constant Name_Id := N + 745; Name_Specification_Exceptions : constant Name_Id := N + 745;
Name_Switches : constant Name_Id := N + 746; Name_Specification_Suffix : constant Name_Id := N + 746;
Name_Symbolic_Link_Supported : constant Name_Id := N + 747; Name_Stack : constant Name_Id := N + 747;
Name_Sync : constant Name_Id := N + 748; Name_Switches : constant Name_Id := N + 748;
Name_Synchronize : constant Name_Id := N + 749; Name_Symbolic_Link_Supported : constant Name_Id := N + 749;
Name_Toolchain_Description : constant Name_Id := N + 750; Name_Sync : constant Name_Id := N + 750;
Name_Toolchain_Version : constant Name_Id := N + 751; Name_Synchronize : constant Name_Id := N + 751;
Name_Runtime_Library_Dir : constant Name_Id := N + 752; Name_Toolchain_Description : constant Name_Id := N + 752;
Name_Toolchain_Version : constant Name_Id := N + 753;
Name_Runtime_Library_Dir : constant Name_Id := N + 754;
-- Other miscellaneous names used in front end -- Other miscellaneous names used in front end
Name_Unaligned_Valid : constant Name_Id := N + 753; Name_Unaligned_Valid : constant Name_Id := N + 755;
-- Ada 2005 reserved words -- Ada 2005 reserved words
First_2005_Reserved_Word : constant Name_Id := N + 754; First_2005_Reserved_Word : constant Name_Id := N + 756;
Name_Interface : constant Name_Id := N + 754; Name_Interface : constant Name_Id := N + 756;
Name_Overriding : constant Name_Id := N + 755; Name_Overriding : constant Name_Id := N + 757;
Name_Synchronized : constant Name_Id := N + 756; Name_Synchronized : constant Name_Id := N + 758;
Last_2005_Reserved_Word : constant Name_Id := N + 756; Last_2005_Reserved_Word : constant Name_Id := N + 758;
subtype Ada_2005_Reserved_Words is subtype Ada_2005_Reserved_Words is
Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
-- Mark last defined name for consistency check in Snames body -- Mark last defined name for consistency check in Snames body
Last_Predefined_Name : constant Name_Id := N + 756; Last_Predefined_Name : constant Name_Id := N + 758;
--------------------------------------- ---------------------------------------
-- Subtypes Defining Name Categories -- -- Subtypes Defining Name Categories --
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment