cxh3001.a
来自「linux下编程用 编译软件」· A 代码 · 共 244 行
A
244 行
-- CXH3001.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 Reviewable.-- Check that pragma Reviewable is accepted as a configuration pragma.---- TEST DESCRIPTION-- The test requires that the configuration pragma Reviewable-- be processed. The following package contains a simple "one of each-- construct in the language" to check that the configuration pragma has-- not disallowed some feature of the language. This test should generate-- no errors.---- APPLICABILITY CRITERIA:-- This test is only applicable for a compiler attempting validation-- for the Safety and Security Annex.---- PASS/FAIL CRITERIA:-- This test passes if it correctly compiles, executes, and reports PASS.-- It fails if the pragma is rejected. The effect of the pragma should-- be to produce a listing with information, including warnings, as-- required in H.3.1. Specific form and contents of this listing are not-- required by this test and are not part of the PASS/FAIL criteria.---- SPECIAL REQUIREMENTS-- The implementation must process a configuration pragma which is not-- part of any Compilation Unit; the method employed is implementation-- defined.---- Pragma Reviewable requires that the implementation provide the-- following information for the compilation units in this test:---- o Where compiler-generated run-time checks remain (6)---- o Identification of any construct with a language-defined check-- that is recognized prior to runtime as certain to fail if-- executed (7)---- o For each reference to a scalar object, an identification of-- the reference as either "known to be initialized,"-- or "possibly uninitialized" (8)---- o Where run-time support routines are implicitly invoked (9)---- o An object code listing including: (10)---- o Machine instructions with relative offsets (11)---- o Where each data object is stored during its lifetime (12)---- o Correspondence with the source program (13)---- o Identification of each construct for which the implementation-- detects the possibility of erroneous execution (14)---- o For each subprogram, block, task or other construct implemented by-- reserving and subsequently freezing an area of the run-time stack,-- an identification of the length of the fixed-size portion of-- the area and an indication of whether the non-fixed size portion-- is reserved on the stack or in a dynamically managed storage-- region (15)------ CHANGE HISTORY:-- 26 OCT 95 SAIC Initial version-- 12 NOV 96 SAIC Revised for 2.1-- 27 AUG 99 RLB Removed result dependence on uninitialized object.-- 30 AUG 99 RLB Repaired the above.----!---------------------------- CONFIGURATION PRAGMAS -----------------------pragma Reviewable; -- OK -- configuration pragma------------------------ END OF CONFIGURATION PRAGMAS ------------------------------------------------------------------------------------- CXH3001_0package CXH3001_0 is type Enum is (Item,Stuff,Things); type Int is range 0..256; type Unt is mod 256; type Flt is digits 5; type Fix is delta 0.5 range -1.0..1.0; type Root(Disc: Enum) is tagged record I: Int; U:Unt; end record; type List is array(Unt) of Root(Stuff); type A_List is access List; type A_Proc is access procedure(R:Root); procedure P(R:Root); function F return A_Proc; protected PT is entry Set(Switch: Boolean); function Enquire return Boolean; private Toggle : Boolean; end PT; task TT is entry Release; end TT; Global_Variable : Boolean := False;end CXH3001_0;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body CXH3001_0 is procedure P(R:Root) is Warnable : Positive := 0; -- (7) -- OPTIONAL WARNING -- this would raise Constraint_Error if P were ever called, however -- this test never calls P. begin case R.Disc is when Item => Report.Comment("Got Item"); when Stuff => Report.Comment("Got Stuff"); when Things => Report.Comment("Got Things"); end case; if Report.Ident_Int( Warnable ) = 0 then Global_Variable := not Global_Variable; -- (8) known to be initialized end if; end P; function F return A_Proc is begin return P'Access; end F; protected body PT is entry Set(Switch: Boolean) when True is begin Toggle := Switch; end Set; function Enquire return Boolean is begin return Toggle; end Enquire; end PT; task body TT is begin loop accept Release; exit when Global_Variable; end loop; end TT; -- (9) TT activationend CXH3001_0;------------------------------------------------------------------- CXH3001with Report;with CXH3001_0;procedure CXH3001 isbegin Report.Test("CXH3001", "Check pragma Reviewable as a configuration pragma"); Block: declare A_Truth : Boolean; Message : String := Report.Ident_Str( "Bad value encountered" ); begin begin A_Truth := Report.Ident_Bool( True ) or A_Truth; -- (8) not initialized if not A_Truth then Report.Comment ("True or Uninit = False"); A_Truth := Report.Ident_Bool (True); else A_Truth := Report.Ident_Bool (True); -- We do this separately on each branch in order to insure that a -- clever optimizer can find out little about this value. Ident_Bool -- is supposed to be opaque to any optimizer. end if; exception when Constraint_Error | Program_Error => -- Possible results of accessing an uninitialized object. A_Truth := Report.Ident_Bool (True); end; CXH3001_0.PT.Set( A_Truth ); CXH3001_0.Global_Variable := A_Truth; CXH3001_0.TT.Release; -- (9) rendezvous with TT while CXH3001_0.TT'Callable loop delay 1.0; -- wait for TT to become non-callable end loop; if not CXH3001_0.PT.Enquire or not CXH3001_0.Global_Variable or CXH3001_0.TT'Callable then Report.Failed(Message); end if; end Block; Report.Result;end CXH3001;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?