aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c7/c761010.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c7/c761010.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c7/c761010.a447
1 files changed, 0 insertions, 447 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c7/c761010.a b/gcc/testsuite/ada/acats/tests/c7/c761010.a
deleted file mode 100644
index 7784c6da517..00000000000
--- a/gcc/testsuite/ada/acats/tests/c7/c761010.a
+++ /dev/null
@@ -1,447 +0,0 @@
--- C761010.A
---
--- Grant of Unlimited Rights
---
--- The Ada Conformity Assessment Authority (ACAA) holds unlimited
--- rights in the software and documentation contained herein. Unlimited
--- rights are the same as those granted by the U.S. Government for older
--- parts of the Ada Conformity Assessment Test Suite, and are defined
--- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA
--- intends to confer upon all recipients unlimited rights equal to those
--- held by the ACAA. 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 7.6(17.1/1) from Technical
--- Corrigendum 1 (originally discussed as AI95-00083).
--- This new paragraph requires that the initialization of an object with
--- an aggregate does not involve calls to Adjust.
---
--- TEST DESCRIPTION
--- We include several cases of initialization:
--- - Explicit initialization of an object declared by an
--- object declaration.
--- - Explicit initialization of a heap object.
--- - Default initialization of a record component.
--- - Initialization of a formal parameter during a call.
--- - Initialization of a formal parameter during a call with
--- a defaulted parameter.
--- - Lots of nested records, arrays, and pointers.
--- In this test, Initialize should never be called, because we
--- never declare a default-initialized controlled object (although
--- we do declare default-initialized records containing controlled
--- objects, with default expressions for the components).
--- Adjust should never be called, because every initialization
--- is via an aggregate. Finalize is called, because the objects
--- themselves need to be finalized.
--- Thus, Initialize and Adjust call Failed.
--- In some of the cases, these procedures will not yet be elaborated,
--- anyway.
---
--- CHANGE HISTORY:
--- 29 JUN 1999 RAD Initial Version
--- 23 SEP 1999 RLB Improved comments, renamed, issued.
--- 10 APR 2000 RLB Corrected errors in comments and text, fixed
--- discriminant error. Fixed so that Report.Test
--- is called before any Report.Failed call. Added
--- a marker so that the failed subtest can be
--- determined.
--- 26 APR 2000 RAD Try to defeat optimizations.
--- 04 AUG 2000 RLB Corrected error in Check_Equal.
--- 18 AUG 2000 RLB Removed dubious main subprogram renames (see AI-172).
--- 19 JUL 2002 RLB Fixed to avoid calling comment after Report.Result.
---
---!
-
-with Ada; use Ada;
-with Report; use Report; pragma Elaborate_All(Report);
-with Ada.Finalization;
-package C761010_1 is
- pragma Elaborate_Body;
- function Square(X: Integer) return Integer;
-private
- type TC_Control is new Ada.Finalization.Limited_Controlled with null record;
- procedure Initialize (Object : in out TC_Control);
- procedure Finalize (Object : in out TC_Control);
- TC_Finalize_Called : Boolean := False;
-end C761010_1;
-
-package body C761010_1 is
- function Square(X: Integer) return Integer is
- begin
- return X**2;
- end Square;
-
- procedure Initialize (Object : in out TC_Control) is
- begin
- Test("C761010_1",
- "Check that Adjust is not called"
- & " when aggregates are used to initialize objects");
- end Initialize;
-
- procedure Finalize (Object : in out TC_Control) is
- begin
- if not TC_Finalize_Called then
- Failed("Var_Strings Finalize never called");
- end if;
- Result;
- end Finalize;
-
- TC_Test : TC_Control; -- Starts test; finalization ends test.
-end C761010_1;
-
-with Ada.Finalization;
-package C761010_1.Var_Strings is
- type Var_String(<>) is private;
-
- Some_String: constant Var_String;
-
- function "=" (X, Y: Var_String) return Boolean;
-
- procedure Check_Equal(X, Y: Var_String);
- -- Calls to this are used to defeat optimizations
- -- that might otherwise defeat the purpose of the
- -- test. I'm talking about the optimization of removing
- -- unused controlled objects.
-
-private
-
- type String_Ptr is access constant String;
-
- type Var_String(Length: Natural) is new Finalization.Controlled with
- record
- Comp_1: String_Ptr := new String'(2..Square(Length)-1 => 'x');
- Comp_2: String_Ptr(1..Length) := null;
- Comp_3: String(Length..Length) := (others => '.');
- TC_Lab: Character := '1';
- end record;
- procedure Initialize(X: in out Var_String);
- procedure Adjust(X: in out Var_String);
- procedure Finalize(X: in out Var_String);
-
- Some_String: constant Var_String
- := (Finalization.Controlled with Length => 1,
- Comp_1 => null,
- Comp_2 => null,
- Comp_3 => "x",
- TC_Lab => 'A');
-
- Another_String: constant Var_String
- := (Finalization.Controlled with Length => 10,
- Comp_1 => Some_String.Comp_2,
- Comp_2 => new String'("1234567890"),
- Comp_3 => "x",
- TC_Lab => 'B');
-
-end C761010_1.Var_Strings;
-
-package C761010_1.Var_Strings.Types is
-
- type Ptr is access all Var_String;
- Ptr_Const: constant Ptr;
-
- type Ptr_Arr is array(Positive range <>) of Ptr;
- Ptr_Arr_Const: constant Ptr_Arr;
-
- type Ptr_Rec(N_Strings: Natural) is
- record
- Ptrs: Ptr_Arr(1..N_Strings);
- end record;
- Ptr_Rec_Const: constant Ptr_Rec;
-
-private
-
- Ptr_Const: constant Ptr := new Var_String'
- (Finalization.Controlled with
- Length => 1,
- Comp_1 => null,
- Comp_2 => null,
- Comp_3 => (others => ' '),
- TC_Lab => 'C');
-
- Ptr_Arr_Const: constant Ptr_Arr :=
- (1 => new Var_String'
- (Finalization.Controlled with
- Length => 1,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'D'));
-
- Ptr_Rec_Var: Ptr_Rec :=
- (3,
- (1..2 => null,
- 3 => new Var_String'
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'E')));
-
- Ptr_Rec_Const: constant Ptr_Rec :=
- (3,
- (1..2 => null,
- 3 => new Var_String'
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'F')));
-
- type Arr is array(Positive range <>) of Var_String(Length => 2);
-
- Arr_Var: Arr :=
- (1 => (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'G'));
-
- type Rec(N_Strings: Natural) is
- record
- Ptrs: Ptr_Rec(N_Strings);
- Strings: Arr(1..N_Strings) :=
- (others =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'H'));
- end record;
-
- Default_Init_Rec_Var: Rec(N_Strings => 10);
- Empty_Default_Init_Rec_Var: Rec(N_Strings => 0);
-
- Rec_Var: Rec(N_Strings => 2) :=
- (N_Strings => 2,
- Ptrs =>
- (2,
- (1..1 => null,
- 2 => new Var_String'
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'J'))),
- Strings =>
- (1 =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'K'),
- others =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'L')));
-
- procedure Check_Equal(X, Y: Rec);
-
-end C761010_1.Var_Strings.Types;
-
-package body C761010_1.Var_Strings.Types is
-
- -- Check that parameter passing doesn't create new objects,
- -- and therefore doesn't need extra Adjusts or Finalizes.
-
- procedure Check_Equal(X, Y: Rec) is
- -- We assume that the arguments should be equal.
- -- But we cannot assume that pointer values are the same.
- begin
- if X.N_Strings /= Y.N_Strings then
- Failed("Records should be equal (1)");
- else
- for I in 1 .. X.N_Strings loop
- if X.Ptrs.Ptrs(I) /= Y.Ptrs.Ptrs(I) then
- if X.Ptrs.Ptrs(I) = null or else
- Y.Ptrs.Ptrs(I) = null or else
- X.Ptrs.Ptrs(I).all /= Y.Ptrs.Ptrs(I).all then
- Failed("Records should be equal (2)");
- end if;
- end if;
- if X.Strings(I) /= Y.Strings(I) then
- Failed("Records should be equal (3)");
- end if;
- end loop;
- end if;
- end Check_Equal;
-
- procedure My_Check_Equal
- (X: Rec := Rec_Var;
- Y: Rec :=
- (N_Strings => 2,
- Ptrs =>
- (2,
- (1..1 => null,
- 2 => new Var_String'
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'M'))),
- Strings =>
- (1 =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'N'),
- others =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'O'))))
- renames Check_Equal;
-begin
-
- My_Check_Equal;
-
- Check_Equal(Rec_Var,
- (N_Strings => 2,
- Ptrs =>
- (2,
- (1..1 => null,
- 2 => new Var_String'
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'P'))),
- Strings =>
- (1 =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'Q'),
- others =>
- (Finalization.Controlled with
- Length => 2,
- Comp_1 => new String'("abcdefghij"),
- Comp_2 => null,
- Comp_3 => (2..2 => ' '),
- TC_Lab => 'R'))));
-
- -- Use the objects to avoid optimizations.
-
- Check_Equal(Ptr_Const.all, Ptr_Const.all);
- Check_Equal(Ptr_Arr_Const(1).all, Ptr_Arr_Const(1).all);
- Check_Equal(Ptr_Rec_Const.Ptrs(Ptr_Rec_Const.N_Strings).all,
- Ptr_Rec_Const.Ptrs(Ptr_Rec_Const.N_Strings).all);
- Check_Equal(Ptr_Rec_Var.Ptrs(Ptr_Rec_Var.N_Strings).all,
- Ptr_Rec_Var.Ptrs(Ptr_Rec_Var.N_Strings).all);
-
- if Report.Equal (3, 2) then
- -- Can't get here.
- Check_Equal (Arr_Var(1), Default_Init_Rec_Var.Strings(1));
- Check_Equal (Arr_Var(1), Empty_Default_Init_Rec_Var.Strings(1));
- end if;
-
-end C761010_1.Var_Strings.Types;
-
-with C761010_1.Var_Strings;
-with C761010_1.Var_Strings.Types;
-procedure C761010_1.Main is
-begin
- -- Report.Test is called by the elaboration of C761010_1, and
- -- Report.Result is called by the finalization of C761010_1.
- -- This will happen before any objects are created, and after any
- -- are finalized.
- null;
-end C761010_1.Main;
-
-with C761010_1.Main;
-procedure C761010 is
-begin
- C761010_1.Main;
-end C761010;
-
-package body C761010_1.Var_Strings is
-
- Some_Error: exception;
-
- procedure Initialize(X: in out Var_String) is
- begin
- Failed("Initialize should never be called");
- raise Some_Error;
- end Initialize;
-
- procedure Adjust(X: in out Var_String) is
- begin
- Failed("Adjust should never be called - case " & X.TC_Lab);
- raise Some_Error;
- end Adjust;
-
- procedure Finalize(X: in out Var_String) is
- begin
- Comment("Finalize called - case " & X.TC_Lab);
- C761010_1.TC_Finalize_Called := True;
- end Finalize;
-
- function "=" (X, Y: Var_String) return Boolean is
- -- Don't check the TC_Lab component, but do check the contents of the
- -- access values.
- begin
- if X.Length /= Y.Length then
- return False;
- end if;
- if X.Comp_3 /= Y.Comp_3 then
- return False;
- end if;
- if X.Comp_1 /= Y.Comp_1 then
- -- Still OK if the values are the same.
- if X.Comp_1 = null or else
- Y.Comp_1 = null or else
- X.Comp_1.all /= Y.Comp_1.all then
- return False;
- --else OK.
- end if;
- end if;
- if X.Comp_2 /= Y.Comp_2 then
- -- Still OK if the values are the same.
- if X.Comp_2 = null or else
- Y.Comp_2 = null or else
- X.Comp_2.all /= Y.Comp_2.all then
- return False;
- end if;
- end if;
- return True;
- end "=";
-
- procedure Check_Equal(X, Y: Var_String) is
- begin
- if X /= Y then
- Failed("Check_Equal of Var_String");
- end if;
- end Check_Equal;
-
-begin
- Check_Equal(Another_String, Another_String);
-end C761010_1.Var_Strings;