URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c4/] [c432002.a] - Rev 720
Compare with Previous | Blame | View Log
-- C432002.A---- Grant of Unlimited Rights---- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained-- unlimited rights in the software and documentation contained herein.-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making-- this public release, the Government intends to confer upon all-- recipients unlimited rights equal to those held by the Government.-- These rights include rights to use, duplicate, release or disclose the-- released technical data and computer software in whole or in part, in-- any manner and for any purpose whatsoever, and to have or permit others-- to do so.---- DISCLAIMER---- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A-- PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:-- Check that if an extension aggregate specifies a value for a record-- extension and the ancestor expression has discriminants that are-- inherited by the record extension, then a check is made that each-- discriminant has the value specified.---- Check that if an extension aggregate specifies a value for a record-- extension and the ancestor expression has discriminants that are not-- inherited by the record extension, then a check is made that each-- such discriminant has the value specified for the corresponding-- discriminant.---- Check that the corresponding discriminant value may be specified-- in the record component association list or in the derived type-- definition for an ancestor.---- Check the case of ancestors that are several generations removed.-- Check the case where the value of the discriminant(s) in question-- is supplied several generations removed.---- Check the case of multiple discriminants.---- Check that Constraint_Error is raised if the check fails.---- TEST DESCRIPTION:-- A hierarchy of tagged types is declared from a discriminated-- root type. Each level declares two kinds of types: (1) a type-- extension which constrains the discriminant of its parent to-- the value of an expression and (2) a type extension that-- constrains the discriminant of its parent to equal a new discriminant-- of the type extension (These are the two categories of noninherited-- discriminants).---- Values for each type are declared within nested blocks. This is-- done so that the instances that produce Constraint_Error may-- be dealt with cleanly without forcing the program to exit.---- Success and failure cases (which should raise Constraint_Error)-- are set up for each kind of type. Additionally, for the first-- level of the hierarchy, separate tests are done for ancestor-- expressions specified by aggregates and those specified by-- variables. Later tests are performed using variables only.---- Additionally, the cases tested consist of the following kinds of-- types:---- Extensions of extensions, using both the parent and grandparent-- types for the ancestor expression,---- Ancestor expressions which are several generations removed-- from the type of the aggregate,---- Extensions of types with multiple discriminants, where the-- extension declares a new discriminant which corresponds to-- more than one discriminant of the ancestor types.-------- CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 19 Dec 94 SAIC Removed RM references from objective text.-- 20 Dec 94 SAIC Repair confusion WRT overridden discriminants----!package C432002_0 issubtype Length is Natural range 0..256;type Discriminant (L : Length) is taggedrecordS1 : String (1..L);end record;procedure Do_Something (Rec : in out Discriminant);-- inherited by all type extensions-- Aggregates of Discriminant are of the form-- (L, S1) where L= S1'Length-- Discriminant of parent constrained to value of an expressiontype Constrained_Discriminant_Extension isnew Discriminant (L => 10)with recordS2 : String (1..20);end record;-- Aggregates of Constrained_Discriminant_Extension are of the form-- (L, S1, S2), where L = S1'Length = 10, S2'Length = 20type Once_Removed is new Constrained_Discriminant_Extensionwith recordS3 : String (1..3);end record;type Twice_Removed is new Once_Removedwith recordS4 : String (1..8);end record;-- Aggregates of Twice_Removed are of the form-- (L, S1, S2, S3, S4), where L = S1'Length = 10,-- S2'Length = 20,-- S3'Length = 3,-- S4'Length = 8-- Discriminant of parent constrained to equal new discriminanttype New_Discriminant_Extension (N : Length) isnew Discriminant (L => N) withrecordS2 : String (1..N);end record;-- Aggregates of New_Discriminant_Extension are of the form-- (N, S1, S2), where N = S1'Length = S2'Length-- Discriminant of parent extension constrained to the value of-- an expressiontype Constrained_Extension_Extension isnew New_Discriminant_Extension (N => 20)with recordS3 : String (1..5);end record;-- Aggregates of Constrained_Extension_Extension are of the form-- (N, S1, S2, S3), where N = S1'Length = S2'Length = 20,-- S3'Length = 5-- Discriminant of parent extension constrained to equal a new-- discriminanttype New_Extension_Extension (I : Length) isnew New_Discriminant_Extension (N => I)with recordS3 : String (1..I);end record;-- Aggregates of New_Extension_Extension are of the form-- (I, S1, 2, S3), where-- I = S1'Length = S2'Length = S3'Lengthtype Multiple_Discriminants (A, B : Length) is taggedrecordS1 : String (1..A);S2 : String (1..B);end record;procedure Do_Something (Rec : in out Multiple_Discriminants);-- inherited by type extension-- Aggregates of Multiple_Discriminants are of the form-- (A, B, S1, S2), where A = S1'Length, B = S2'Lengthtype Multiple_Discriminant_Extension (C : Length) isnew Multiple_Discriminants (A => C, B => C)with recordS3 : String (1..C);end record;-- Aggregates of Multiple_Discriminant_Extension are of the form-- (A, B, S1, S2, C, S3), where-- A = B = C = S1'Length = S2'Length = S3'Lengthend C432002_0;with Report;package body C432002_0 isS : String (1..20) := "12345678901234567890";procedure Do_Something (Rec : in out Discriminant) isbeginRec.S1 := Report.Ident_Str (S (1..Rec.L));end Do_Something;procedure Do_Something (Rec : in out Multiple_Discriminants) isbeginRec.S1 := Report.Ident_Str (S (1..Rec.A));end Do_Something;end C432002_0;with C432002_0;with Report;procedure C432002 is-- Various different-sized strings for varietyString_3 : String (1..3) := Report.Ident_Str("123");String_5 : String (1..5) := Report.Ident_Str("12345");String_8 : String (1..8) := Report.Ident_Str("12345678");String_10 : String (1..10) := Report.Ident_Str("1234567890");String_11 : String (1..11) := Report.Ident_Str("12345678901");String_20 : String (1..20) := Report.Ident_Str("12345678901234567890");beginReport.Test ("C432002","Extension aggregates for discriminated types");---------------------------------------------------------------------- Extension constrains parent's discriminant to value of expression---------------------------------------------------------------------- Successful cases - value matches corresponding discriminant valueCD_Matched_Aggregate:begindeclareCD : C432002_0.Constrained_Discriminant_Extension :=(C432002_0.Discriminant'(L => 10,S1 => String_10)with S2 => String_20);beginC432002_0.Do_Something(CD); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension " &"with discriminant constrained: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end CD_Matched_Aggregate;CD_Matched_Variable:begindeclareD : C432002_0.Discriminant(L => 10) :=C432002_0.Discriminant'(L => 10,S1 => String_10);CD : C432002_0.Constrained_Discriminant_Extension :=(D with S2 => String_20);beginC432002_0.Do_Something(CD); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is a variable");Report.Failed ("Aggregate of extension " &"with discriminant constrained: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end CD_Matched_Variable;-- Unsuccessful cases - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.CD_Unmatched_Aggregate:begindeclareCD : C432002_0.Constrained_Discriminant_Extension :=(C432002_0.Discriminant'(L => 5,S1 => String_5)with S2 => String_20);beginReport.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension " &"with discriminant constrained: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(CD); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise of Constraint_Error is expectedend CD_Unmatched_Aggregate;CD_Unmatched_Variable:begindeclareD : C432002_0.Discriminant(L => 5) :=C432002_0.Discriminant'(L => 5,S1 => String_5);CD : C432002_0.Constrained_Discriminant_Extension :=(D with S2 => String_20);beginReport.Comment ("Ancestor expression is an variable");Report.Failed ("Aggregate of extension " &"with discriminant constrained: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(CD); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise of Constraint_Error is expectedend CD_Unmatched_Variable;------------------------------------------------------------------------- Extension constrains parent's discriminant to equal new discriminant------------------------------------------------------------------------- Successful cases - value matches corresponding discriminant valueND_Matched_Aggregate:begindeclareND : C432002_0.New_Discriminant_Extension (N => 8) :=(C432002_0.Discriminant'(L => 8,S1 => String_8)with N => 8,S2 => String_8);beginC432002_0.Do_Something(ND); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension " &"with new discriminant: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end ND_Matched_Aggregate;ND_Matched_Variable:begindeclareD : C432002_0.Discriminant(L => 3) :=C432002_0.Discriminant'(L => 3,S1 => String_3);ND : C432002_0.New_Discriminant_Extension (N => 3) :=(D with N => 3,S2 => String_3);beginC432002_0.Do_Something(ND); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is an variable");Report.Failed ("Aggregate of extension " &"with new discriminant: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end ND_Matched_Variable;-- Unsuccessful cases - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.ND_Unmatched_Aggregate:begindeclareND : C432002_0.New_Discriminant_Extension (N => 20) :=(C432002_0.Discriminant'(L => 11,S1 => String_11)with N => 20,S2 => String_20);beginReport.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension " &"with new discriminant: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(ND); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend ND_Unmatched_Aggregate;ND_Unmatched_Variable:begindeclareD : C432002_0.Discriminant(L => 5) :=C432002_0.Discriminant'(L => 5,S1 => String_5);ND : C432002_0.New_Discriminant_Extension (N => 20) :=(D with N => 20,S2 => String_20);beginReport.Comment ("Ancestor expression is an variable");Report.Failed ("Aggregate of extension " &"with new discriminant: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(ND); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend ND_Unmatched_Variable;---------------------------------------------------------------------- Extension constrains parent's discriminant to value of expression-- Parent is a discriminant extension---------------------------------------------------------------------- Successful cases - value matches corresponding discriminant valueCE_Matched_Aggregate:begindeclareCE : C432002_0.Constrained_Extension_Extension :=(C432002_0.Discriminant'(L => 20,S1 => String_20)with N => 20,S2 => String_20,S3 => String_5);beginC432002_0.Do_Something(CE); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension (of extension) " &"with discriminant constrained: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end CE_Matched_Aggregate;CE_Matched_Variable:begindeclareND : C432002_0.New_Discriminant_Extension (N => 20) :=C432002_0.New_Discriminant_Extension'(N => 20,S1 => String_20,S2 => String_20);CE : C432002_0.Constrained_Extension_Extension :=(ND with S3 => String_5);beginC432002_0.Do_Something(CE); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is a variable");Report.Failed ("Aggregate of extension (of extension) " &"with discriminant constrained: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end CE_Matched_Variable;-- Unsuccessful cases - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.CE_Unmatched_Aggregate:begindeclareCE : C432002_0.Constrained_Extension_Extension :=(C432002_0.New_Discriminant_Extension'(N => 11,S1 => String_11,S2 => String_11)with S3 => String_5);beginReport.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension (of extension) " &"Constraint_Error was not raised " &"with discriminant constrained: " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(CE); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise of Constraint_Error is expectedend CE_Unmatched_Aggregate;CE_Unmatched_Variable:begindeclareD : C432002_0.Discriminant(L => 8) :=C432002_0.Discriminant'(L => 8,S1 => String_8);CE : C432002_0.Constrained_Extension_Extension :=(D with N => 8,S2 => String_8,S3 => String_5);beginReport.Comment ("Ancestor expression is a variable");Report.Failed ("Aggregate of extension (of extension) " &"with discriminant constrained: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(CE); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise of Constraint_Error is expectedend CE_Unmatched_Variable;------------------------------------------------------------------------- Extension constrains parent's discriminant to equal new discriminant-- Parent is a discriminant extension------------------------------------------------------------------------- Successful cases - value matches corresponding discriminant valueNE_Matched_Aggregate:begindeclareNE : C432002_0.New_Extension_Extension (I => 8) :=(C432002_0.Discriminant'(L => 8,S1 => String_8)with I => 8,S2 => String_8,S3 => String_8);beginC432002_0.Do_Something(NE); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is an aggregate");Report.Failed ("Aggregate of extension (of extension) " &"with new discriminant: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end NE_Matched_Aggregate;NE_Matched_Variable:begindeclareND : C432002_0.New_Discriminant_Extension (N => 3) :=C432002_0.New_Discriminant_Extension'(N => 3,S1 => String_3,S2 => String_3);NE : C432002_0.New_Extension_Extension (I => 3) :=(ND with I => 3,S3 => String_3);beginC432002_0.Do_Something(NE); -- successend;exceptionwhen Constraint_Error =>Report.Comment ("Ancestor expression is a variable");Report.Failed ("Aggregate of extension (of extension) " &"with new discriminant: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end NE_Matched_Variable;-- Unsuccessful cases - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.NE_Unmatched_Aggregate:begindeclareNE : C432002_0.New_Extension_Extension (I => 8) :=(C432002_0.New_Discriminant_Extension'(C432002_0.Discriminant'(L => 11,S1 => String_11)with N => 11,S2 => String_11)with I => 8,S3 => String_8);beginReport.Comment ("Ancestor expression is an extension aggregate");Report.Failed ("Aggregate of extension (of extension) " &"with new discriminant: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(NE); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend NE_Unmatched_Aggregate;NE_Unmatched_Variable:begindeclareD : C432002_0.Discriminant(L => 5) :=C432002_0.Discriminant'(L => 5,S1 => String_5);NE : C432002_0.New_Extension_Extension (I => 20) :=(D with I => 5,S2 => String_5,S3 => String_20);beginReport.Comment ("Ancestor expression is a variable");Report.Failed ("Aggregate of extension (of extension) " &"with new discriminant: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(NE); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend NE_Unmatched_Variable;------------------------------------------------------------------------- Corresponding discriminant is two levels deeper than aggregate------------------------------------------------------------------------- Successful case - value matches corresponding discriminant valueTR_Matched_Variable:begindeclareD : C432002_0.Discriminant (L => 10) :=C432002_0.Discriminant'(L => 10,S1 => String_10);TR : C432002_0.Twice_Removed :=C432002_0.Twice_Removed'(D with S2 => String_20,S3 => String_3,S4 => String_8);-- N is constrained to a value in the derived_type_definition-- of Constrained_Discriminant_Extension. Its omission from-- the above record_component_association_list is allowed by-- 4.3.2(6).beginC432002_0.Do_Something(TR); -- successend;exceptionwhen Constraint_Error =>Report.Failed ("Aggregate of far-removed extension " &"with discriminant constrained: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end TR_Matched_Variable;-- Unsuccessful case - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.TR_Unmatched_Variable:begindeclareD : C432002_0.Discriminant (L => 5) :=C432002_0.Discriminant'(L => 5,S1 => String_5);TR : C432002_0.Twice_Removed :=C432002_0.Twice_Removed'(D with S2 => String_20,S3 => String_3,S4 => String_8);beginReport.Failed ("Aggregate of far-removed extension " &"with discriminant constrained: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(TR); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend TR_Unmatched_Variable;-------------------------------------------------------------------------- Parent has multiple discriminants.-- Discriminant in extension corresponds to both parental discriminants.-------------------------------------------------------------------------- Successful case - value matches corresponding discriminant valueMD_Matched_Variable:begindeclareMD : C432002_0.Multiple_Discriminants (A => 10, B => 10) :=C432002_0.Multiple_Discriminants'(A => 10,B => 10,S1 => String_10,S2 => String_10);MDE : C432002_0.Multiple_Discriminant_Extension (C => 10) :=(MD with C => 10,S3 => String_10);beginC432002_0.Do_Something(MDE); -- successend;exceptionwhen Constraint_Error =>Report.Failed ("Aggregate of extension " &"of multiply-discriminated parent: " &"Constraint_Error was incorrectly raised " &"for value that matches corresponding " &"discriminant");end MD_Matched_Variable;-- Unsuccessful case - value does not match value of corresponding-- discriminant. Constraint_Error should be-- raised.MD_Unmatched_Variable:begindeclareMD : C432002_0.Multiple_Discriminants (A => 10, B => 8) :=C432002_0.Multiple_Discriminants'(A => 10,B => 8,S1 => String_10,S2 => String_8);MDE : C432002_0.Multiple_Discriminant_Extension (C => 10) :=(MD with C => 10,S3 => String_10);beginReport.Failed ("Aggregate of extension " &"of multiply-discriminated parent: " &"Constraint_Error was not raised " &"for discriminant value that does not match " &"corresponding discriminant");C432002_0.Do_Something(MDE); -- disallow unused var optimizationend;exceptionwhen Constraint_Error =>null; -- raise is expectedend MD_Unmatched_Variable;Report.Result;end C432002;
