[Bug ada/126740] New: Assert_Failure from mix of records, generics, and -gnatn

liam at liampwll dot com via Gcc-bugs <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126740

            Bug ID: 126740
           Summary: Assert_Failure from mix of records, generics, and
                    -gnatn
           Product: gcc
           Version: 16.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liam at liampwll dot com
                CC: dkm at gcc dot gnu.org
  Target Milestone: ---

Created attachment 65278
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=65278&action=edit
reproducer

This was discovered while testing https://github.com/Prunt3D/prunt at different
optimisation levels. The underlying cause seems to be this bit of
Sem_Util.Abstract_Interface_List, however I haven't dug into it too much since
-gnatn doesn't improve performance where we need it anyway:

      elsif Ekind (Typ) = E_Record_Subtype then
         Nod := Type_Definition (Parent (Etype (Typ)));

Using the same behaviour as the E_Record_Subtype_With_Private case seems to fix
the issue, so I assume the comment there also applies to E_Record_Subtype.

Attached reproducer was pulled out of the codebase using a LLM armed with
adareducer since I could not figure out the pattern that causes this. It can be
compiled with `gcc -c -O2 -gnatn2 -gnatX motion.adb` or `-O3 -gnatn`.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.