summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-08 14:41:45 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-08 14:41:45 +0000
commitb6b9686797fcc7ad0fe4ef87bad867d84df53580 (patch)
treec975f59a6cc43241e9981611d5d561d4b7e59a8c /gcc/ada
parentdd9fb5ec3bfaa55c676d4409159fc0eb019ed809 (diff)
downloadgcc-b6b9686797fcc7ad0fe4ef87bad867d84df53580.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145743 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/exp_disp.adb8
-rw-r--r--gcc/ada/exp_util.adb8
-rw-r--r--gcc/ada/snames.adb2
-rw-r--r--gcc/ada/snames.ads228
4 files changed, 132 insertions, 114 deletions
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 --