]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Child unit subprograms are not primitive subprograms
authorSteve Baird <baird@adacore.com>
Tue, 25 Feb 2025 21:51:40 +0000 (13:51 -0800)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Fri, 6 Jun 2025 08:37:12 +0000 (10:37 +0200)
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.

gcc/ada/sem_util.adb

index 42f852e336bddfcc31e69f48ea553118ee5948d2..fefb65c6733c8df3f3f4dd6780fee94de8ee361d 100644 (file)
@@ -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;