From ce4e59c46ba3989a420afca61ddcf9550e02ab7f Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 9 Apr 2008 14:21:18 +0000 Subject: re PR ada/28305 (GNAT bug when inlining instance of a generic subprogram) 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. From-SVN: r134142 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_ch6.adb | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'gcc/ada') 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; -- cgit v1.1