cxh1001.a

来自「用于进行gcc测试」· A 代码 · 共 350 行

A
350
字号
-- CXH1001.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 pragma Normalize_Scalars.--     Check that this configuration pragma causes uninitialized scalar--     objects to be set to a predictable value.  Check that multiple--     compilation units are affected.  Check for uninitialized scalar--     objects that are subcomponents of composite objects, unassigned--     out parameters, objects that have been allocated without an initial--     value, and objects that are stand alone.---- TEST DESCRIPTION--     The test requires that the configuration pragma Normalize_Scalars--     be processed.  It then defines a few scalar types (some enumeration,--     some integer) in a few packages.  The scalar types are designed such--     that the representation will easily allow for an out of range value.--     Unchecked_Conversion and the 'Valid attribute are both used to verify--     that the default values of the various kinds of objects are indeed--     invalid for the type.----     Note that this test relies on having uninitialized objects, compilers--     may generate several warnings to this effect.---- SPECIAL REQUIREMENTS--      The implementation must process configuration pragmas which--      are not part of any Compilation Unit;  the method employed--      is implementation defined.---- APPLICABILITY CRITERIA:--      This test is only applicable for a compiler attempting validation--      for the Safety and Security Annex.------ CHANGE HISTORY:--      26 OCT 95   SAIC   Initial version--      04 NOV 96   SAIC   Added cases, upgraded commentary----!---------------------------- CONFIGURATION PRAGMAS -----------------------pragma Normalize_Scalars;                                         -- OK                                                -- configuration pragma------------------------ END OF CONFIGURATION PRAGMAS ------------------------------------------------------------------------------------- CXH1001_0with Impdef.Annex_H;with Unchecked_Conversion;package CXH1001_0 is  package Imp_H renames Impdef.Annex_H;  use type Imp_H.Small_Number;  use type Imp_H.Scalar_To_Normalize;  Global_Object : Imp_H.Scalar_To_Normalize;  -- if the pragma is in effect, this should come up with the predictable  -- value  Global_Number : Imp_H.Small_Number;  -- if the pragma is in effect, this should come up with the predictable  -- value  procedure Package_Check;  type Num is range 0..2**Imp_H.Scalar_To_Normalize'Size-1;  for Num'Size use Imp_H.Scalar_To_Normalize'Size;    function STN_2_Num is     new Unchecked_Conversion( Imp_H.Scalar_To_Normalize, Num );  Small_Last : constant Integer := Integer(Imp_H.Small_Number'Last);end CXH1001_0;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body CXH1001_0 is  procedure Heap_Check( A_Value  : access Imp_H.Scalar_To_Normalize;                        A_Number : access Imp_H.Small_Number ) is    Value  : Num;    Number : Integer;  begin    if A_Value.all'Valid then      Value := STN_2_Num ( A_Value.all );      if Imp_H.Default_For_Scalar_To_Normalize_Is_In_Range then        if Imp_H.Scalar_To_Normalize'Val(Value)           /= Imp_H.Default_For_Scalar_To_Normalize then          Report.Failed("Implicit initial value for local variable is not "                         & "the predicted value");         end if;      else        if Value in 0 ..            Imp_H.Scalar_To_Normalize'Pos(Imp_H.Scalar_To_Normalize'Last) then          Report.Failed("Implicit initial value for local variable is a "                         & "value of the type");         end if;      end if;    end if;    if A_Number.all'Valid then      Number := Integer( A_Number.all );      if Imp_H.Default_For_Small_Number_Is_In_Range then        if Global_Number /= Imp_H.Default_For_Small_Number then          Report.Failed("Implicit initial value for number is not "                         & "the predicted value");         end if;      else        if Integer( Global_Number ) in 0 .. Report.Ident_Int(Small_Last) then          Report.Failed("Implicit initial value for number is a "                         & "value of the type");         end if;      end if;    end if;  end Heap_Check;  procedure Package_Check is    Value  : Num;    Number : Integer;  begin    if Global_Object'Valid then      Value := STN_2_Num ( Global_Object );      if Imp_H.Default_For_Scalar_To_Normalize_Is_In_Range then        if Imp_H.Scalar_To_Normalize'Val(Value)           /= Imp_H.Default_For_Scalar_To_Normalize then          Report.Failed("Implicit initial value for local variable is not "                         & "the predicted value");         end if;      else        if Value in 0 ..             Imp_H.Scalar_To_Normalize'Pos(Imp_H.Scalar_To_Normalize'Last) then          Report.Failed("Implicit initial value for local variable is a "                         & "value of the type");         end if;      end if;    end if;    if Global_Number'Valid then      Number := Integer( Global_Number );      if Imp_H.Default_For_Small_Number_Is_In_Range then        if Global_Number /= Imp_H.Default_For_Small_Number then          Report.Failed("Implicit initial value for number is not "                         & "the predicted value");         end if;      else        if Integer( Global_Number ) in 0 .. Report.Ident_Int(Small_Last) then          Report.Failed("Implicit initial value for number is a "                         & "value of the type");         end if;      end if;    end if;    Heap_Check( new Imp_H.Scalar_To_Normalize, new Imp_H.Small_Number );  end Package_Check;end CXH1001_0;----------------------------------------------------------------- CXH1001_1with Unchecked_Conversion;package CXH1001_0.CXH1001_1 is  -- kill as many birds as possible with a single stone:  --   embed a protected object in the body of a child package,  -- checks the multiple compilation unit case,  -- and part of the subcomponent case.  protected Thingy is    procedure Check_Embedded_Values;  private    Hidden_Object : Imp_H.Scalar_To_Normalize;  -- not initialized    Hidden_Number : Imp_H.Small_Number;         -- not initialized  end Thingy;end CXH1001_0.CXH1001_1;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body CXH1001_0.CXH1001_1 is  Childs_Object : Imp_H.Scalar_To_Normalize;  -- not initialized  protected body Thingy is    procedure Check_Embedded_Values is    begin      if Imp_H.Default_For_Scalar_To_Normalize_Is_In_Range then        if Childs_Object /= Imp_H.Default_For_Scalar_To_Normalize then          Report.Failed("Implicit initial value for child object is not "                         & "the predicted value");         end if;      elsif Childs_Object'Valid and then STN_2_Num( Childs_Object ) in 0 ..            Imp_H.Scalar_To_Normalize'Pos(Imp_H.Scalar_To_Normalize'Last) then          Report.Failed("Implicit initial value for child object is a "                         & "value of the type");       end if;      if Imp_H.Default_For_Scalar_To_Normalize_Is_In_Range then        if Hidden_Object /= Imp_H.Default_For_Scalar_To_Normalize then          Report.Failed("Implicit initial value for protected package object "                         & "is not the predicted value");         end if;      elsif Hidden_Object'Valid and then STN_2_Num( Hidden_Object ) in 0 ..            Imp_H.Scalar_To_Normalize'Pos(Imp_H.Scalar_To_Normalize'Last) then          Report.Failed("Implicit initial value for protected component "                         & "is a value of the type");       end if;      if Imp_H.Default_For_Small_Number_Is_In_Range then        if Hidden_Number /= Imp_H.Default_For_Small_Number then          Report.Failed("Implicit initial value for protected number "                         & "is not the predicted value");         end if;      elsif Hidden_Number'Valid and then Hidden_Number in                    0 .. Imp_H.Small_Number(Report.Ident_Int(Small_Last)) then          Report.Failed("Implicit initial value for protected number "                         & "is a value of the type");       end if;    end Check_Embedded_Values; end Thingy;end CXH1001_0.CXH1001_1;------------------------------------------------------------------- CXH1001with Impdef.Annex_H;with Report;with CXH1001_0.CXH1001_1;procedure CXH1001 is  package Imp_H renames Impdef.Annex_H;  use type CXH1001_0.Num;  My_Object : Imp_H.Scalar_To_Normalize;  -- not initialized  Value     : CXH1001_0.Num := CXH1001_0.STN_2_Num ( My_Object );                               -- My_Object is not initialized  Parameter_Value : Imp_H.Scalar_To_Normalize                  := Imp_H.Scalar_To_Normalize'Last;  type Structure is record  -- not initialized    Std_Int : Integer;    Scalar  : Imp_H.Scalar_To_Normalize;    Num     : CXH1001_0.Num;  end record;  S : Structure;  -- not initialized  procedure Bad_Code( Unassigned : out Imp_H.Scalar_To_Normalize ) is    -- returns uninitialized OUT parameter  begin    if Report.Ident_Int( 0 ) = 1 then      Report.Failed( "Nothing is something" );      Unassigned := Imp_H.Scalar_To_Normalize'First;    end if;  end Bad_Code;   procedure Check( V : CXH1001_0.Num; Message : String ) is  begin    if Imp_H.Default_For_Scalar_To_Normalize_Is_In_Range then      if V /= Imp_H.Scalar_To_Normalize'Pos(                                  Imp_H.Default_For_Scalar_To_Normalize) then        Report.Failed(Message & ": Implicit initial value for object "                       & "is not the predicted value");       end if;    elsif V'Valid and then V in      0 .. Imp_H.Scalar_To_Normalize'Pos(Imp_H.Scalar_To_Normalize'Last) then      Report.Failed(Message & ": Implicit initial value for object "                     & "is a value of the type");     end if;  end Check;begin  -- Main test procedure.  Report.Test ("CXH1001", "Check that the configuration pragma " &                          "Normalize_Scalars causes uninitialized scalar " &                          "objects to be set to a predictable value. " &                          "Check that multiple compilation units are " &                          "affected.  Check for uninitialized scalar " &                          "objects that are subcomponents of composite " &                          "objects, unassigned out parameters, have been " &                          "allocated without an initial value, and are " &                          "stand alone." );     CXH1001_0.Package_Check;  if My_Object'Valid then    Value := CXH1001_0.STN_2_Num ( My_Object ); -- My_Object not initialized  end if;  -- otherwise, we just leave Value uninitialized  Check( Value, "main procedure variable" );  Bad_Code( Parameter_Value );  if Parameter_Value'Valid then    Check( CXH1001_0.STN_2_Num ( Parameter_Value ), "Out parameter return" );  end if;  if S.Scalar'Valid then    Check( CXH1001_0.STN_2_Num ( S.Scalar ), "Record component" );  end if;  CXH1001_0.CXH1001_1.Thingy.Check_Embedded_Values;  Report.Result;end CXH1001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?