aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c8/c854002.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c8/c854002.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c8/c854002.a185
1 files changed, 0 insertions, 185 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c8/c854002.a b/gcc/testsuite/ada/acats/tests/c8/c854002.a
deleted file mode 100644
index 19bca35984e..00000000000
--- a/gcc/testsuite/ada/acats/tests/c8/c854002.a
+++ /dev/null
@@ -1,185 +0,0 @@
--- C854002.A
---
--- Grant of Unlimited Rights
---
--- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and
--- F08630-91-C-0015, 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 WHATSOVER, 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 the requirements of the new 8.5.4(8.A) from Technical
--- Corrigendum 1 (originally discussed as AI95-00064).
--- This paragraph requires an elaboration check on renamings-as-body:
--- even if the body of the ultimately-called subprogram has been
--- elaborated, the check should fail if the renaming-as-body
--- itself has not yet been elaborated.
---
--- TEST DESCRIPTION
--- We declare two functions F and G, and ensure that they are
--- elaborated before anything else, by using pragma Pure. Then we
--- declare two renamings-as-body: the renaming of F is direct, and
--- the renaming of G is via an access-to-function object. We call
--- the renamings during elaboration, and check that they raise
--- Program_Error. We then call them again after elaboration; this
--- time, they should work.
---
--- CHANGE HISTORY:
--- 29 JUN 1999 RAD Initial Version
--- 23 SEP 1999 RLB Improved comments, renamed, issued.
--- 28 JUN 2002 RLB Added pragma Elaborate_All for Report.
---!
-
-package C854002_1 is
- pragma Pure;
- -- Empty.
-end C854002_1;
-
-package C854002_1.Pure is
- pragma Pure;
- function F return String;
- function G return String;
-end C854002_1.Pure;
-
-with C854002_1.Pure;
-package C854002_1.Renamings is
-
- F_Result: constant String := C854002_1.Pure.F; -- Make sure we can call F.
- function Renamed_F return String;
-
- G_Result: constant String := C854002_1.Pure.G;
- type String_Function is access function return String;
- G_Pointer: String_Function := null;
- -- Will be set to C854002_1.Pure.G'Access in the body.
- function Renamed_G return String;
-
-end C854002_1.Renamings;
-
-package C854002_1.Caller is
-
- -- These procedures call the renamings; when called during elaboration,
- -- we pass Should_Fail => True, which checks that Program_Error is
- -- raised. Later, we use Should_Fail => False.
-
- procedure Call_Renamed_F(Should_Fail: Boolean);
- procedure Call_Renamed_G(Should_Fail: Boolean);
-
-end C854002_1.Caller;
-
-with Report; use Report; pragma Elaborate_All (Report);
-with C854002_1.Renamings;
-package body C854002_1.Caller is
-
- Some_Error: exception;
-
- procedure Call_Renamed_F(Should_Fail: Boolean) is
- begin
- if Should_Fail then
- begin
- Failed(C854002_1.Renamings.Renamed_F);
- raise Some_Error;
- -- This raise statement is necessary, because the
- -- Report package has a bug -- if Failed is called
- -- before Test, then the failure is ignored, and the
- -- test prints "PASSED".
- -- Presumably, this raise statement will cause the
- -- program to crash, thus avoiding the PASSED message.
- exception
- when Program_Error =>
- Comment("Program_Error -- OK");
- end;
- else
- if C854002_1.Renamings.F_Result /= C854002_1.Renamings.Renamed_F then
- Failed("Bad result from renamed F");
- end if;
- end if;
- end Call_Renamed_F;
-
- procedure Call_Renamed_G(Should_Fail: Boolean) is
- begin
- if Should_Fail then
- begin
- Failed(C854002_1.Renamings.Renamed_G);
- raise Some_Error;
- exception
- when Program_Error =>
- Comment("Program_Error -- OK");
- end;
- else
- if C854002_1.Renamings.G_Result /= C854002_1.Renamings.Renamed_G then
- Failed("Bad result from renamed G");
- end if;
- end if;
- end Call_Renamed_G;
-
-begin
- -- At this point, the bodies of Renamed_F and Renamed_G have not yet
- -- been elaborated, so calling them should raise Program_Error:
- Call_Renamed_F(Should_Fail => True);
- Call_Renamed_G(Should_Fail => True);
-end C854002_1.Caller;
-
-package body C854002_1.Pure is
-
- function F return String is
- begin
- return "This is function F";
- end F;
-
- function G return String is
- begin
- return "This is function G";
- end G;
-
-end C854002_1.Pure;
-
-with C854002_1.Pure;
-with C854002_1.Caller; pragma Elaborate(C854002_1.Caller);
- -- This pragma ensures that this package body (Renamings)
- -- will be elaborated after Caller, so that when Caller calls
- -- the renamings during its elaboration, the renamings will
- -- not have been elaborated (although what the rename have been).
-package body C854002_1.Renamings is
-
- function Renamed_F return String renames C854002_1.Pure.F;
-
- package Dummy is end; -- So we can insert statements here.
- package body Dummy is
- begin
- G_Pointer := C854002_1.Pure.G'Access;
- end Dummy;
-
- function Renamed_G return String renames G_Pointer.all;
-
-end C854002_1.Renamings;
-
-with Report; use Report;
-with C854002_1.Caller;
-procedure C854002 is
-begin
- Test("C854002",
- "An elaboration check is performed for a call to a subprogram"
- & " whose body is given as a renaming-as-body");
-
- -- By the time we get here, all library units have been elaborated,
- -- so the following calls should not raise Program_Error:
- C854002_1.Caller.Call_Renamed_F(Should_Fail => False);
- C854002_1.Caller.Call_Renamed_G(Should_Fail => False);
-
- Result;
-end C854002;