https://gcc.gnu.org/g:fbe4dd20b9f25eaa0b6b90d008aff4708e47765b

commit r15-1530-gfbe4dd20b9f25eaa0b6b90d008aff4708e47765b
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Tue May 28 13:03:19 2024 +0200

    ada: Fix internal error on protected type with -gnatc -gnatR
    
    It occurs when the body of a protected subprogram is processed, because the
    references to the components of the type have not been properly expanded.
    
    gcc/ada/
    
            * gcc-interface/trans.cc (Subprogram_Body_to_gnu): Also return early
            for a protected subprogram in -gnatc mode.

Diff:
---
 gcc/ada/gcc-interface/trans.cc | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index 83ed17bff842..3f2eadd7b2bc 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -3934,6 +3934,12 @@ Subprogram_Body_to_gnu (Node_Id gnat_node)
   if (Is_Generic_Subprogram (gnat_subprog) || Is_Eliminated (gnat_subprog))
     return;
 
+  /* Likewise if this is a protected subprogram and we are only annotating
+     types, as the required expansion of references did not take place.  */
+  if (Convention (gnat_subprog) == Convention_Protected
+      && type_annotate_only)
+    return;
+
   /* If this subprogram acts as its own spec, define it.  Otherwise, just get
      the already-elaborated tree node.  However, if this subprogram had its
      elaboration deferred, we will already have made a tree node for it.  So

Reply via email to