From bb66f6b859a369e128c5df4a8e1a02476d4678ee Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Apr 2008 14:21:18 +0000 Subject: [PATCH] gcc/ada/ PR ada/28305 * sem_ch6.adb (Build_Body_To_Inline): Do not save and restore environment if generic instance is a top-level one. gcc/testsuite/ 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134142 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_ch6.adb | 10 ++++++++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gnat.dg/specs/fe_inlining.ads | 4 ++++ gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb | 4 ++++ gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads | 3 +++ 6 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/specs/fe_inlining.ads create mode 100644 gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb create mode 100644 gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads 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 + + 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 * 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 + + 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 * 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; -- 2.7.4