diff options
author | Ed Schonberg <schonberg@adacore.com> | 2006-02-17 17:07:56 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2006-02-17 17:07:56 +0100 |
commit | 861f090ef3bdb37838d74515311e419ddb35b549 (patch) | |
tree | 22857c8b90ddc128484ae3c5bb9f701de7c64a2e /gcc/ada | |
parent | 9af38f0c56e8dd7a894328682c92446216c4f9a5 (diff) | |
download | gcc-861f090ef3bdb37838d74515311e419ddb35b549.zip gcc-861f090ef3bdb37838d74515311e419ddb35b549.tar.gz gcc-861f090ef3bdb37838d74515311e419ddb35b549.tar.bz2 |
sem_ch12.adb (Analyze_Package_Instantiation): Inline_Now is false if the current instance is nested within another instance...
2006-02-17 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Analyze_Package_Instantiation): Inline_Now is false if
the current instance is nested within another instance in a child unit.
From-SVN: r111192
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/sem_ch12.adb | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index ba3cc95..9b9313c 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -2710,16 +2710,24 @@ package body Sem_Ch12 is end if; -- If the current scope is itself an instance within a child - -- unit, and that unit itself is not an instance, it is - -- duplicated in the scope stack, and the unstacking mechanism - -- in Inline_Instance_Body will fail. This loses some rare - -- cases of optimization, and might be improved some day ???? - - if Is_Generic_Instance (Current_Scope) - and then Is_Child_Unit (Scope (Current_Scope)) - and then not Is_Generic_Instance (Scope (Current_Scope)) - then - Inline_Now := False; + -- unit,there will be duplications in the scope stack, and the + -- unstacking mechanism in Inline_Instance_Body will fail. + -- This loses some rare cases of optimization, and might be + -- improved some day, if we can find a proper abstraction for + -- "the complete compilation context" that can be saved and + -- restored ??? + + if Is_Generic_Instance (Current_Scope) then + declare + Curr_Unit : constant Entity_Id := + Cunit_Entity (Current_Sem_Unit); + begin + if Curr_Unit /= Current_Scope + and then Is_Child_Unit (Curr_Unit) + then + Inline_Now := False; + end if; + end; end if; end if; |