diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-07-28 11:11:53 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-07-28 11:11:53 +0200 |
commit | e657b693e999a4cf34c9ae6849c36fa9c6437d3a (patch) | |
tree | b297031ff3b6be068bf0f58e1ecd818abd19a9b7 | |
parent | 327503f14780f4c9e8ee3ea4675abd0935761c79 (diff) | |
download | gcc-e657b693e999a4cf34c9ae6849c36fa9c6437d3a.zip gcc-e657b693e999a4cf34c9ae6849c36fa9c6437d3a.tar.gz gcc-e657b693e999a4cf34c9ae6849c36fa9c6437d3a.tar.bz2 |
[multiple changes]
2009-07-28 Arnaud Charlet <charlet@adacore.com>
* frontend.adb: Minor reformatting.
(Frontend): Only call Check_SCIL_Nodes if assertions are enabled,
for efficiency.
2009-07-28 Bob Duff <duff@adacore.com>
* exp_attr.adb (Expand_Access_To_Protected_Op): Use 'Access instead of
'Address to get a pointer to the protected body wrapper.
From-SVN: r150150
-rw-r--r-- | gcc/ada/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/ada/exp_attr.adb | 19 | ||||
-rw-r--r-- | gcc/ada/frontend.adb | 9 |
3 files changed, 30 insertions, 9 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0fe4ef4..e5a9d72 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,14 @@ +2009-07-28 Arnaud Charlet <charlet@adacore.com> + + * frontend.adb: Minor reformatting. + (Frontend): Only call Check_SCIL_Nodes if assertions are enabled, + for efficiency. + +2009-07-28 Bob Duff <duff@adacore.com> + + * exp_attr.adb (Expand_Access_To_Protected_Op): Use 'Access instead of + 'Address to get a pointer to the protected body wrapper. + 2009-07-28 Javier Miranda <miranda@adacore.com> * gnat1drv.adb (Adjust_Global_Switches): Disable generation of SCIL diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 599d0ca..56fa4c4 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -235,6 +235,7 @@ package body Exp_Attr is Agg : Node_Id; Btyp : constant Entity_Id := Base_Type (Typ); Sub : Entity_Id; + Sub_Ref : Node_Id; E_T : constant Entity_Id := Equivalent_Type (Btyp); Acc : constant Entity_Id := Etype (Next_Component (First_Component (E_T))); @@ -355,15 +356,23 @@ package body Exp_Attr is Attribute_Name => Name_Address); end if; + Sub_Ref := + Make_Attribute_Reference (Loc, + Prefix => Sub, + Attribute_Name => Name_Access); + + -- We set the type of the access reference to the already generated + -- access_to_subprogram type, and declare the reference analyzed, to + -- prevent further expansion when the enclosing aggregate is analyzed. + + Set_Etype (Sub_Ref, Acc); + Set_Analyzed (Sub_Ref); + Agg := Make_Aggregate (Loc, Expressions => New_List ( - Obj_Ref, - Unchecked_Convert_To (Acc, - Make_Attribute_Reference (Loc, - Prefix => Sub, - Attribute_Name => Name_Address)))); + Obj_Ref, Sub_Ref)); Rewrite (N, Agg); diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index 00eb5ca..8cb372a 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -342,7 +342,7 @@ begin -- incorporate subunits at a lower level. if Operating_Mode = Generate_Code - and then Nkind (Unit (Cunit (Main_Unit))) = N_Subunit + and then Nkind (Unit (Cunit (Main_Unit))) = N_Subunit then Operating_Mode := Check_Semantics; end if; @@ -355,8 +355,8 @@ begin -- Cleanup processing after completing main analysis if Operating_Mode = Generate_Code - or else (Operating_Mode = Check_Semantics - and then ASIS_Mode) + or else (Operating_Mode = Check_Semantics + and then ASIS_Mode) then Instantiate_Bodies; end if; @@ -404,7 +404,8 @@ begin -- dispatching calls reference subprogram calls. if Generate_SCIL then - Check_SCIL_Nodes (Cunit (Main_Unit)); + pragma Debug (Check_SCIL_Nodes (Cunit (Main_Unit))); + null; end if; -- Dump the source now. Note that we do this as soon as the analysis |