public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/guojiufu/heads/personal-branch)] [Ada] Compiler crash processing controlled type primitive
@ 2020-06-10 3:25 Jiu Fu Guo
0 siblings, 0 replies; only message in thread
From: Jiu Fu Guo @ 2020-06-10 3:25 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:b60be63da23e0db9435e8620fab9edd531e4ed6b
commit b60be63da23e0db9435e8620fab9edd531e4ed6b
Author: Javier Miranda <miranda@adacore.com>
Date: Fri Dec 27 15:01:33 2019 -0500
[Ada] Compiler crash processing controlled type primitive
2020-06-02 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_util.adb (Ensure_Minimum_Decoration): New subprogram that
ensures the minimum decoration required by
Requires_Transient_Scope() to provide its functionality when the
entity is not frozen.
Diff:
---
gcc/ada/sem_util.adb | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 064e613b4fc..6b54b5e77ec 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -24370,11 +24370,64 @@ package body Sem_Util is
function Requires_Transient_Scope (Id : Entity_Id) return Boolean is
Old_Result : constant Boolean := Old_Requires_Transient_Scope (Id);
+ procedure Ensure_Minimum_Decoration (Typ : Entity_Id);
+ -- If Typ is not frozen then add to Typ the minimum decoration required
+ -- by Requires_Transient_Scope to reliably provide its functionality;
+ -- otherwise no action is performed.
+
+ -------------------------------
+ -- Ensure_Minimum_Decoration --
+ -------------------------------
+
+ procedure Ensure_Minimum_Decoration (Typ : Entity_Id) is
+ begin
+ -- Do not set Has_Controlled_Component on a class-wide equivalent
+ -- type. See Make_CW_Equivalent_Type.
+
+ if Present (Typ)
+ and then not Is_Frozen (Typ)
+ and then (Is_Record_Type (Typ)
+ or else Is_Concurrent_Type (Typ)
+ or else Is_Incomplete_Or_Private_Type (Typ))
+ and then not Is_Class_Wide_Equivalent_Type (Typ)
+ then
+ declare
+ Comp : Entity_Id;
+
+ begin
+ Comp := First_Component (Typ);
+ while Present (Comp) loop
+ if Has_Controlled_Component (Etype (Comp))
+ or else
+ (Chars (Comp) /= Name_uParent
+ and then Is_Controlled (Etype (Comp)))
+ or else
+ (Is_Protected_Type (Etype (Comp))
+ and then
+ Present (Corresponding_Record_Type (Etype (Comp)))
+ and then
+ Has_Controlled_Component
+ (Corresponding_Record_Type (Etype (Comp))))
+ then
+ Set_Has_Controlled_Component (Typ);
+ exit;
+ end if;
+
+ Next_Component (Comp);
+ end loop;
+ end;
+ end if;
+ end Ensure_Minimum_Decoration;
+
+ -- Start of processing for Requires_Transient_Scope
+
begin
if Debug_Flag_QQ then
return Old_Result;
end if;
+ Ensure_Minimum_Decoration (Id);
+
declare
New_Result : constant Boolean := New_Requires_Transient_Scope (Id);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-06-10 3:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-10 3:25 [gcc(refs/users/guojiufu/heads/personal-branch)] [Ada] Compiler crash processing controlled type primitive Jiu Fu Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).