aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-07-28 11:11:53 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-07-28 11:11:53 +0200
commite657b693e999a4cf34c9ae6849c36fa9c6437d3a (patch)
treeb297031ff3b6be068bf0f58e1ecd818abd19a9b7
parent327503f14780f4c9e8ee3ea4675abd0935761c79 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/ada/exp_attr.adb19
-rw-r--r--gcc/ada/frontend.adb9
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