From: Eric Botcazou Date: Tue, 28 May 2024 11:03:19 +0000 (+0200) Subject: ada: Fix internal error on protected type with -gnatc -gnatR X-Git-Tag: basepoints/gcc-16~8023 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fbe4dd20b9f25eaa0b6b90d008aff4708e47765b;p=thirdparty%2Fgcc.git 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 --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index 83ed17bff84..3f2eadd7b2b 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