https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120705

            Bug ID: 120705
           Summary: Assertion failure on Finalizable aspect and
                    discriminant-dependent String bounds
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dennis at przytarski dot com
                CC: dkm at gcc dot gnu.org
  Target Milestone: ---

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

This code

pragma Ada_2022;
pragma Extensions_Allowed (On);
package Example is

   package Z is

      type A is abstract tagged limited null record
         with Finalizable => (Initialize => Initialize); -- remove

      procedure Initialize (this : in out A) is abstract;

      type B (l : Natural) is new A with
         record
            a : String (1 .. l); -- replace l by 3
         end record;

      overriding
      procedure Initialize (this : in out B) is null;

      function Make return B is (l => 3, a => "asd");

   end Z;

   Y : Z.B := Z.Make; -- this line would normally be in a procedure, but it's
here to keep the code short and reproduce the GNAT bug

end Example;

fails with

+===========================GNAT BUG DETECTED==============================+
| 16.0.0 20250618 (experimental) (x86_64-linux-gnu) Assert_Failure
tbuild.adb:722|
| Error detected at example.ads:24:4                                       |
| Compiling <source>                                               |

The GNAT bug does not occur if either
* the Finalizable aspect is removed from type A, or
* the discriminant l is not used to define the bounds of the String field.

Reply via email to