gen_disp.ad[sb]: New test.
* gnat.dg/gen_disp.ad[sb]: New test. * gnat.dg/specs/empty_variants.ads: Adjust. From-SVN: r135658
This commit is contained in:
parent
9c63c208a5
commit
95b42490a8
@ -3,7 +3,9 @@
|
||||
* gnat.dg/testint.adb: New test.
|
||||
* gnat.dg/modular1.adb: New test.
|
||||
* gnat.dg/test_iface_aggr.adb: New test.
|
||||
* gnat.dg/gen_disp.ad[sb]: New test.
|
||||
* gnat.dg/specs/tag2.ads: Adjust.
|
||||
* gnat.dg/specs/empty_variants.ads: Adjust.
|
||||
|
||||
2008-05-20 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
|
45
gcc/testsuite/gnat.dg/gen_disp.adb
Normal file
45
gcc/testsuite/gnat.dg/gen_disp.adb
Normal file
@ -0,0 +1,45 @@
|
||||
-- { dg-do compile }
|
||||
with Ada.Containers.Ordered_Maps;
|
||||
with Ada.Tags.Generic_Dispatching_Constructor;
|
||||
package body gen_disp is
|
||||
|
||||
use type Ada.Tags.Tag;
|
||||
|
||||
function "<" (L, R : in Ada.Tags.Tag) return Boolean is
|
||||
begin
|
||||
return Ada.Tags.External_Tag (L) < Ada.Tags.External_Tag (R);
|
||||
end "<";
|
||||
|
||||
package Char_To_Tag_Map is new Ada.Containers.Ordered_Maps (
|
||||
Key_Type => Character,
|
||||
Element_Type => Ada.Tags.Tag,
|
||||
"<" => "<",
|
||||
"=" => Ada.Tags. "=");
|
||||
|
||||
package Tag_To_Char_Map is new Ada.Containers.Ordered_Maps (
|
||||
Key_Type => Ada.Tags.Tag,
|
||||
Element_Type => Character,
|
||||
"<" => "<",
|
||||
"=" => "=");
|
||||
|
||||
use type Char_To_Tag_Map.Cursor;
|
||||
use type Tag_To_Char_Map.Cursor;
|
||||
|
||||
Char_To_Tag : Char_To_Tag_Map.Map;
|
||||
Tag_To_Char : Tag_To_Char_Map.Map;
|
||||
|
||||
function Get_Object is new
|
||||
Ada.Tags.Generic_Dispatching_Constructor
|
||||
(Root_Type, Ada.Streams.Root_Stream_Type'Class, Root_Type'Input);
|
||||
|
||||
function Root_Type_Class_Input
|
||||
(S : not null access Ada.Streams.Root_Stream_Type'Class)
|
||||
return Root_Type'Class
|
||||
is
|
||||
External_Tag : constant Character := Character'Input (S);
|
||||
C : constant Char_To_Tag_Map.Cursor := Char_To_Tag.Find (External_Tag);
|
||||
begin
|
||||
|
||||
return Get_Object (Char_To_Tag_Map.Element (C), S);
|
||||
end Root_Type_Class_Input;
|
||||
end gen_disp;
|
10
gcc/testsuite/gnat.dg/gen_disp.ads
Normal file
10
gcc/testsuite/gnat.dg/gen_disp.ads
Normal file
@ -0,0 +1,10 @@
|
||||
with Ada.Streams, Ada.Tags;
|
||||
package gen_disp is
|
||||
type Root_Type is tagged null record;
|
||||
|
||||
function Root_Type_Class_Input
|
||||
(S : not null access Ada.Streams.Root_Stream_Type'Class)
|
||||
return Root_Type'Class;
|
||||
|
||||
for Root_Type'Class'Input use Root_Type_Class_Input;
|
||||
end gen_disp;
|
32
gcc/testsuite/gnat.dg/specs/empty_variants.ads
Normal file
32
gcc/testsuite/gnat.dg/specs/empty_variants.ads
Normal file
@ -0,0 +1,32 @@
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-gnatdF" }
|
||||
|
||||
package Empty_Variants is
|
||||
|
||||
type Rec (D : Integer := 1) is record
|
||||
case D is
|
||||
when 1 =>
|
||||
I : Integer;
|
||||
when 2 .. 5 =>
|
||||
J : Integer;
|
||||
K : Integer;
|
||||
when 6 =>
|
||||
null;
|
||||
when 7 .. 8 =>
|
||||
null;
|
||||
when others =>
|
||||
L : Integer;
|
||||
M : Integer;
|
||||
N : Integer;
|
||||
end case;
|
||||
end record;
|
||||
|
||||
R : Rec;
|
||||
|
||||
I : Integer := R.I;
|
||||
J : Integer := R.J;
|
||||
K : Integer := R.K;
|
||||
L : Integer := R.L;
|
||||
M : Integer := R.L;
|
||||
|
||||
end Empty_Variants;
|
Loading…
Reference in New Issue
Block a user