From: Steve Baird <[email protected]>
If a package declares a type and a child unit of that package is a subprogram
with a parameter (or function result) of that type, then that subprogram is
not a primitive subprogram of that type. Previously this was handled
incorrectly in some cases, leading to incorrect analysis of overriding
indicators.
gcc/ada/ChangeLog:
* sem_util.adb (Collect_Primitive_Operations): When collecting
primitive operations, do not include child unit subprograms.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_util.adb | 1 +
1 file changed, 1 insertion(+)
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 42f852e336b..fefb65c6733 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -5717,6 +5717,7 @@ package body Sem_Util is
or else Is_Primitive (Id))
and then Parent_Kind (Parent (Id))
not in N_Formal_Subprogram_Declaration
+ and then not Is_Child_Unit (Id)
then
Is_Prim := False;
--
2.43.0