[Bug ada/38332] New: Program fails to raise Constraint_Error as mandated by ARM 4.7(4)

ludovic at ludovic-brenta dot org gcc-bugzilla@gcc.gnu.org
Sun Nov 30 15:41:00 GMT 2008


with Text_io; use Text_io;
procedure test1 is
   type Root (K : boolean) is tagged null record;

   type Root_Access is access Root'Class;

   type Child is new Root (K => True) with null record;

   Var : Root_Access;
begin
   begin
      Var := new Child'(K => False);
      put_line("FAILED " & Boolean'Image(Var.K));
   exception
      when Constraint_Error => Put_line("PASSED");
   end;
end;

Per ARM 3.7(26), type Root is unconstrained because it has a
known_discriminant_part.  Per 3.4(6), Child is unconstrained because its parent
is unconstrained.  However, its parent_subtype_indication does specify a
constraint.  The allocator "new Child'(K => False)" uses a qualified_expression
that violates this constraint; therefore its evaluation should raise
Constraint_Error at run time, per 4.7(4).

The program should print PASSED but instead prints "FAILED FALSE".

As a quality of implementation issue, it would be nice if GNAT would warn at
compile time of this constraint violation.


-- 
           Summary: Program fails to raise Constraint_Error as mandated by
                    ARM 4.7(4)
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ludovic at ludovic-brenta dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38332



More information about the Gcc-bugs mailing list