aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2006-02-17 17:07:56 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2006-02-17 17:07:56 +0100
commit861f090ef3bdb37838d74515311e419ddb35b549 (patch)
tree22857c8b90ddc128484ae3c5bb9f701de7c64a2e /gcc/ada
parent9af38f0c56e8dd7a894328682c92446216c4f9a5 (diff)
downloadgcc-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.adb28
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;