From 86c67698125508426a8ceb9af52a4df632445a55 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 21 Oct 2009 10:20:06 +0000 Subject: * gcc-interfaces/decl.c (build_subst_list): Convert the expression of the constraint to the type of the discriminant. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@153054 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/decl.c | 16 ++++++++++------ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/discr22.adb | 23 +++++++++++++++++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/discr22.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5d69cee0594..e4761d82e1f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Eric Botcazou + + * gcc-interfaces/decl.c (build_subst_list): Convert the expression of + the constraint to the type of the discriminant. + 2009-10-21 Eric Botcazou * gcc-interfaces/decl.c (gnat_to_gnu_entity): Do not create a new diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 70ced844fb6..d0b52f2e745 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -7374,12 +7374,16 @@ build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition) gnat_value = Next_Elmt (gnat_value)) /* Ignore access discriminants. */ if (!Is_Access_Type (Etype (Node (gnat_value)))) - gnu_list = tree_cons (gnat_to_gnu_field_decl (gnat_discrim), - elaborate_expression - (Node (gnat_value), gnat_subtype, - get_entity_name (gnat_discrim), definition, - true, false), - gnu_list); + { + tree gnu_field = gnat_to_gnu_field_decl (gnat_discrim); + gnu_list = tree_cons (gnu_field, + convert (TREE_TYPE (gnu_field), + elaborate_expression + (Node (gnat_value), gnat_subtype, + get_entity_name (gnat_discrim), + definition, true, false)), + gnu_list); + } return gnu_list; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae7687def70..e827cc9eec7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-10-21 Eric Botcazou + + * gnat.dg/discr22.adb: New test. + 2009-10-21 Eric Botcazou * gnat.dg/loop_optimization7.ad[sb]: New test. diff --git a/gcc/testsuite/gnat.dg/discr22.adb b/gcc/testsuite/gnat.dg/discr22.adb new file mode 100644 index 00000000000..af4f9ab7899 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr22.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +procedure Discr22 is + + subtype Precision is Integer range 1 .. 5; + + type Rec(D1 : Precision; D2 : Integer) is record + case D1 is + when 1 => I : Integer; + when others => null; + end case; + end record; + for Rec use record + D1 at 0 range 0 .. 7; + end record; + + P : Precision; + X : Rec(P, 0); + +begin + null; +end; -- cgit v1.2.3