aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/sem_ch6.adb10
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/specs/fe_inlining.ads4
-rw-r--r--gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb4
-rw-r--r--gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads3
6 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index fe17591..f659d33 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-09 Samuel Tardieu <sam@rfc1149.net>
+
+ PR ada/28305
+ * sem_ch6.adb (Build_Body_To_Inline): Do not save and restore
+ environment if generic instance is a top-level one.
+
2008-04-09 Doug Rupp <rupp@adacore.com>
* decl.c (validate_size): Set minimum size for fat pointers same as
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 759607e..668a2a7 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -2929,7 +2929,11 @@ package body Sem_Ch6 is
-- Within an instance, the body to inline must be treated as a nested
-- generic, so that the proper global references are preserved.
- if In_Instance then
+ -- Note that we do not do this at the library level, because it is not
+ -- needed, and furthermore this causes trouble if front end inlining
+ -- is activated (-gnatN).
+
+ if In_Instance and then Scope (Current_Scope) /= Standard_Standard then
Save_Env (Scope (Current_Scope), Scope (Current_Scope));
Original_Body := Copy_Generic_Node (N, Empty, True);
else
@@ -2977,7 +2981,9 @@ package body Sem_Ch6 is
Expander_Mode_Restore;
- if In_Instance then
+ -- Restore environment if previously saved
+
+ if In_Instance and then Scope (Current_Scope) /= Standard_Standard then
Restore_Env;
end if;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 41ad6d3..18d9236 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-09 Samuel Tardieu <sam@rfc1149.net>
+
+ PR ada/28305
+ * gnat.dg/specs/fe_inlining.ads, gnat.dg/specs/fe_inlining_helper.ads,
+ gnat.dg/specs/fe_inlining_helper.adb: New test.
+
2008-04-09 Kai Tietz <kai.tietz@onevision.com>
* gcc.dg/torture/fp-int-convert.h: Use TImode type for
diff --git a/gcc/testsuite/gnat.dg/specs/fe_inlining.ads b/gcc/testsuite/gnat.dg/specs/fe_inlining.ads
new file mode 100644
index 0000000..ef5f469
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/fe_inlining.ads
@@ -0,0 +1,4 @@
+-- { dg-do compile }
+-- { dg-options "-O -gnatN" }
+with FE_Inlining_Helper;
+procedure FE_Inlining is new FE_Inlining_Helper;
diff --git a/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb b/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb
new file mode 100644
index 0000000..c149ea3
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb
@@ -0,0 +1,4 @@
+procedure FE_Inlining_Helper is
+begin
+ null;
+end FE_Inlining_Helper;
diff --git a/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads b/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads
new file mode 100644
index 0000000..733268c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads
@@ -0,0 +1,3 @@
+-- { dg-excess-errors "no code generated" }
+generic
+procedure FE_Inlining_Helper;