From: Arnaud Charlet Date: Wed, 8 Apr 2009 14:41:45 +0000 (+0200) Subject: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4da17013c086241754907c0560c4c84427aec3ac;p=gcc.git [multiple changes] 2009-04-08 Vincent Celier * snames.adb, snames.ads: Add new standard names IDE and Compiler_Command. 2009-04-08 Ed Schonberg * 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 --- diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 96dd8dae610..b4f44298f60 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -36,6 +36,7 @@ with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; with Freeze; use Freeze; with Itypes; use Itypes; +with Layout; use Layout; with Nlists; use Nlists; with Nmake; use Nmake; with Namet; use Namet; @@ -557,7 +558,7 @@ package body Exp_Disp is Res_Typ := Etype (Subp); 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); Set_Etype (Subp_Typ, Res_Typ); Set_Returns_By_Ref (Subp_Typ, Returns_By_Ref (Subp)); @@ -615,9 +616,14 @@ package body Exp_Disp is Create_Extra_Formals (Subp_Typ); 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_Directly_Designated_Type (Subp_Ptr_Typ, 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 -- interface class-wide type then use it directly. Otherwise, the tag diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index b36f80d46cd..6b91569a4e9 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -4842,6 +4842,14 @@ package body Exp_Util is then 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 -- never a problem. Note that unconstrained records are considered -- to be of known size, but we can't consider them that way here, diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb index 0617391ba06..820d30cc6aa 100644 --- a/gcc/ada/snames.adb +++ b/gcc/ada/snames.adb @@ -705,6 +705,7 @@ package body Snames is "builder#" & "builder_switches#" & "compiler#" & + "compiler_command#" & "compiler_kind#" & "config_body_file_name#" & "config_body_file_name_pattern#" & @@ -734,6 +735,7 @@ package body Snames is "global_config_file#" & "gnatls#" & "gnatstub#" & + "ide#" & "implementation#" & "implementation_exceptions#" & "implementation_suffix#" & diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads index b5fbeb1fc5b..a9d90c7c05d 100644 --- a/gcc/ada/snames.ads +++ b/gcc/ada/snames.ads @@ -1029,131 +1029,133 @@ package Snames is Name_Builder : constant Name_Id := N + 644; Name_Builder_Switches : constant Name_Id := N + 645; Name_Compiler : constant Name_Id := N + 646; - Name_Compiler_Kind : constant Name_Id := N + 647; - Name_Config_Body_File_Name : constant Name_Id := N + 648; - Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 649; - Name_Config_File_Switches : constant Name_Id := N + 650; - Name_Config_File_Unique : constant Name_Id := N + 651; - Name_Config_Spec_File_Name : constant Name_Id := N + 652; - Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 653; - Name_Configuration : constant Name_Id := N + 654; - Name_Cross_Reference : constant Name_Id := N + 655; - Name_Default_Language : constant Name_Id := N + 656; - Name_Default_Switches : constant Name_Id := N + 657; - Name_Dependency_Driver : constant Name_Id := N + 658; - Name_Dependency_File_Kind : constant Name_Id := N + 659; - Name_Dependency_Switches : constant Name_Id := N + 660; - Name_Driver : constant Name_Id := N + 661; - Name_Excluded_Source_Dirs : constant Name_Id := N + 662; - Name_Excluded_Source_Files : constant Name_Id := N + 663; - Name_Excluded_Source_List_File : constant Name_Id := N + 664; - Name_Exec_Dir : constant Name_Id := N + 665; - Name_Executable : constant Name_Id := N + 666; - Name_Executable_Suffix : constant Name_Id := N + 667; - Name_Extends : constant Name_Id := N + 668; - Name_Externally_Built : constant Name_Id := N + 669; - Name_Finder : constant Name_Id := N + 670; - Name_Global_Compilation_Switches : constant Name_Id := N + 671; - Name_Global_Configuration_Pragmas : constant Name_Id := N + 672; - Name_Global_Config_File : constant Name_Id := N + 673; - Name_Gnatls : constant Name_Id := N + 674; - Name_Gnatstub : constant Name_Id := N + 675; - Name_Implementation : constant Name_Id := N + 676; - Name_Implementation_Exceptions : constant Name_Id := N + 677; - Name_Implementation_Suffix : constant Name_Id := N + 678; - Name_Include_Switches : constant Name_Id := N + 679; - Name_Include_Path : constant Name_Id := N + 680; - Name_Include_Path_File : constant Name_Id := N + 681; - Name_Inherit_Source_Path : constant Name_Id := N + 682; - Name_Language_Kind : constant Name_Id := N + 683; - Name_Language_Processing : constant Name_Id := N + 684; - Name_Languages : constant Name_Id := N + 685; - Name_Library : constant Name_Id := N + 686; - Name_Library_Ali_Dir : constant Name_Id := N + 687; - Name_Library_Auto_Init : constant Name_Id := N + 688; - Name_Library_Auto_Init_Supported : constant Name_Id := N + 689; - Name_Library_Builder : constant Name_Id := N + 690; - Name_Library_Dir : constant Name_Id := N + 691; - Name_Library_GCC : constant Name_Id := N + 692; - Name_Library_Interface : constant Name_Id := N + 693; - Name_Library_Kind : constant Name_Id := N + 694; - Name_Library_Name : constant Name_Id := N + 695; - Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 696; - Name_Library_Options : constant Name_Id := N + 697; - Name_Library_Partial_Linker : constant Name_Id := N + 698; - Name_Library_Reference_Symbol_File : constant Name_Id := N + 699; - Name_Library_Src_Dir : constant Name_Id := N + 700; - Name_Library_Support : constant Name_Id := N + 701; - Name_Library_Symbol_File : constant Name_Id := N + 702; - Name_Library_Symbol_Policy : constant Name_Id := N + 703; - Name_Library_Version : constant Name_Id := N + 704; - Name_Library_Version_Switches : constant Name_Id := N + 705; - Name_Linker : constant Name_Id := N + 706; - Name_Linker_Executable_Option : constant Name_Id := N + 707; - Name_Linker_Lib_Dir_Option : constant Name_Id := N + 708; - Name_Linker_Lib_Name_Option : constant Name_Id := N + 709; - Name_Local_Config_File : constant Name_Id := N + 710; - Name_Local_Configuration_Pragmas : constant Name_Id := N + 711; - Name_Locally_Removed_Files : constant Name_Id := N + 712; - Name_Map_File_Option : constant Name_Id := N + 713; - Name_Mapping_File_Switches : constant Name_Id := N + 714; - Name_Mapping_Spec_Suffix : constant Name_Id := N + 715; - Name_Mapping_Body_Suffix : constant Name_Id := N + 716; - Name_Metrics : constant Name_Id := N + 717; - Name_Naming : constant Name_Id := N + 718; - Name_Object_Generated : constant Name_Id := N + 719; - Name_Objects_Linked : constant Name_Id := N + 720; - Name_Objects_Path : constant Name_Id := N + 721; - Name_Objects_Path_File : constant Name_Id := N + 722; - Name_Object_Dir : constant Name_Id := N + 723; - Name_Path_Syntax : constant Name_Id := N + 724; - Name_Pic_Option : constant Name_Id := N + 725; - Name_Pretty_Printer : constant Name_Id := N + 726; - Name_Prefix : constant Name_Id := N + 727; - Name_Project : constant Name_Id := N + 728; - Name_Roots : constant Name_Id := N + 729; - Name_Required_Switches : constant Name_Id := N + 730; - Name_Run_Path_Option : constant Name_Id := N + 731; - Name_Runtime_Project : constant Name_Id := N + 732; - Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 733; - Name_Shared_Library_Prefix : constant Name_Id := N + 734; - Name_Shared_Library_Suffix : constant Name_Id := N + 735; - Name_Separate_Suffix : constant Name_Id := N + 736; - Name_Source_Dirs : constant Name_Id := N + 737; - Name_Source_Files : constant Name_Id := N + 738; - Name_Source_List_File : constant Name_Id := N + 739; - Name_Spec : constant Name_Id := N + 740; - Name_Spec_Suffix : constant Name_Id := N + 741; - Name_Specification : constant Name_Id := N + 742; - Name_Specification_Exceptions : constant Name_Id := N + 743; - Name_Specification_Suffix : constant Name_Id := N + 744; - Name_Stack : constant Name_Id := N + 745; - Name_Switches : constant Name_Id := N + 746; - Name_Symbolic_Link_Supported : constant Name_Id := N + 747; - Name_Sync : constant Name_Id := N + 748; - Name_Synchronize : constant Name_Id := N + 749; - Name_Toolchain_Description : constant Name_Id := N + 750; - Name_Toolchain_Version : constant Name_Id := N + 751; - Name_Runtime_Library_Dir : constant Name_Id := N + 752; + Name_Compiler_Command : constant Name_Id := N + 647; + Name_Compiler_Kind : constant Name_Id := N + 648; + Name_Config_Body_File_Name : constant Name_Id := N + 649; + Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 650; + Name_Config_File_Switches : constant Name_Id := N + 651; + Name_Config_File_Unique : constant Name_Id := N + 652; + Name_Config_Spec_File_Name : constant Name_Id := N + 653; + Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 654; + Name_Configuration : constant Name_Id := N + 655; + Name_Cross_Reference : constant Name_Id := N + 656; + Name_Default_Language : constant Name_Id := N + 657; + Name_Default_Switches : constant Name_Id := N + 658; + Name_Dependency_Driver : constant Name_Id := N + 659; + Name_Dependency_File_Kind : constant Name_Id := N + 660; + Name_Dependency_Switches : constant Name_Id := N + 661; + Name_Driver : constant Name_Id := N + 662; + Name_Excluded_Source_Dirs : constant Name_Id := N + 663; + Name_Excluded_Source_Files : constant Name_Id := N + 664; + Name_Excluded_Source_List_File : constant Name_Id := N + 665; + Name_Exec_Dir : constant Name_Id := N + 666; + Name_Executable : constant Name_Id := N + 667; + Name_Executable_Suffix : constant Name_Id := N + 668; + Name_Extends : constant Name_Id := N + 669; + Name_Externally_Built : constant Name_Id := N + 670; + Name_Finder : constant Name_Id := N + 671; + Name_Global_Compilation_Switches : constant Name_Id := N + 672; + Name_Global_Configuration_Pragmas : constant Name_Id := N + 673; + Name_Global_Config_File : constant Name_Id := N + 674; + Name_Gnatls : constant Name_Id := N + 675; + Name_Gnatstub : constant Name_Id := N + 676; + Name_Ide : constant Name_Id := N + 677; + Name_Implementation : constant Name_Id := N + 678; + Name_Implementation_Exceptions : constant Name_Id := N + 679; + Name_Implementation_Suffix : constant Name_Id := N + 680; + Name_Include_Switches : constant Name_Id := N + 681; + Name_Include_Path : constant Name_Id := N + 682; + Name_Include_Path_File : constant Name_Id := N + 683; + Name_Inherit_Source_Path : constant Name_Id := N + 684; + Name_Language_Kind : constant Name_Id := N + 685; + Name_Language_Processing : constant Name_Id := N + 686; + Name_Languages : constant Name_Id := N + 687; + Name_Library : constant Name_Id := N + 688; + Name_Library_Ali_Dir : constant Name_Id := N + 689; + Name_Library_Auto_Init : constant Name_Id := N + 690; + Name_Library_Auto_Init_Supported : constant Name_Id := N + 691; + Name_Library_Builder : constant Name_Id := N + 692; + Name_Library_Dir : constant Name_Id := N + 693; + Name_Library_GCC : constant Name_Id := N + 694; + Name_Library_Interface : constant Name_Id := N + 695; + Name_Library_Kind : constant Name_Id := N + 696; + Name_Library_Name : constant Name_Id := N + 697; + Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 698; + Name_Library_Options : constant Name_Id := N + 699; + Name_Library_Partial_Linker : constant Name_Id := N + 700; + Name_Library_Reference_Symbol_File : constant Name_Id := N + 701; + Name_Library_Src_Dir : constant Name_Id := N + 702; + Name_Library_Support : constant Name_Id := N + 703; + Name_Library_Symbol_File : constant Name_Id := N + 704; + Name_Library_Symbol_Policy : constant Name_Id := N + 705; + Name_Library_Version : constant Name_Id := N + 706; + Name_Library_Version_Switches : constant Name_Id := N + 707; + Name_Linker : constant Name_Id := N + 708; + Name_Linker_Executable_Option : constant Name_Id := N + 709; + Name_Linker_Lib_Dir_Option : constant Name_Id := N + 710; + Name_Linker_Lib_Name_Option : constant Name_Id := N + 711; + Name_Local_Config_File : constant Name_Id := N + 712; + Name_Local_Configuration_Pragmas : constant Name_Id := N + 713; + Name_Locally_Removed_Files : constant Name_Id := N + 714; + Name_Map_File_Option : constant Name_Id := N + 715; + Name_Mapping_File_Switches : constant Name_Id := N + 716; + Name_Mapping_Spec_Suffix : constant Name_Id := N + 717; + Name_Mapping_Body_Suffix : constant Name_Id := N + 718; + Name_Metrics : constant Name_Id := N + 719; + Name_Naming : constant Name_Id := N + 720; + Name_Object_Generated : constant Name_Id := N + 721; + Name_Objects_Linked : constant Name_Id := N + 722; + Name_Objects_Path : constant Name_Id := N + 723; + Name_Objects_Path_File : constant Name_Id := N + 724; + Name_Object_Dir : constant Name_Id := N + 725; + Name_Path_Syntax : constant Name_Id := N + 726; + Name_Pic_Option : constant Name_Id := N + 727; + Name_Pretty_Printer : constant Name_Id := N + 728; + Name_Prefix : constant Name_Id := N + 729; + Name_Project : constant Name_Id := N + 730; + Name_Roots : constant Name_Id := N + 731; + Name_Required_Switches : constant Name_Id := N + 732; + Name_Run_Path_Option : constant Name_Id := N + 733; + Name_Runtime_Project : constant Name_Id := N + 734; + Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 735; + Name_Shared_Library_Prefix : constant Name_Id := N + 736; + Name_Shared_Library_Suffix : constant Name_Id := N + 737; + Name_Separate_Suffix : constant Name_Id := N + 738; + Name_Source_Dirs : constant Name_Id := N + 739; + Name_Source_Files : constant Name_Id := N + 740; + Name_Source_List_File : constant Name_Id := N + 741; + Name_Spec : constant Name_Id := N + 742; + Name_Spec_Suffix : constant Name_Id := N + 743; + Name_Specification : constant Name_Id := N + 744; + Name_Specification_Exceptions : constant Name_Id := N + 745; + Name_Specification_Suffix : constant Name_Id := N + 746; + Name_Stack : constant Name_Id := N + 747; + Name_Switches : constant Name_Id := N + 748; + Name_Symbolic_Link_Supported : constant Name_Id := N + 749; + Name_Sync : constant Name_Id := N + 750; + Name_Synchronize : constant Name_Id := N + 751; + 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 - Name_Unaligned_Valid : constant Name_Id := N + 753; + Name_Unaligned_Valid : constant Name_Id := N + 755; -- Ada 2005 reserved words - First_2005_Reserved_Word : constant Name_Id := N + 754; - Name_Interface : constant Name_Id := N + 754; - Name_Overriding : constant Name_Id := N + 755; - Name_Synchronized : constant Name_Id := N + 756; - Last_2005_Reserved_Word : constant Name_Id := N + 756; + First_2005_Reserved_Word : constant Name_Id := N + 756; + Name_Interface : constant Name_Id := N + 756; + Name_Overriding : constant Name_Id := N + 757; + Name_Synchronized : constant Name_Id := N + 758; + Last_2005_Reserved_Word : constant Name_Id := N + 758; subtype Ada_2005_Reserved_Words is Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; -- 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 --