From 40d1f6afc1cc9ab5fb2bf748562c68706eec95d9 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 3 Jul 2010 09:54:13 +0000 Subject: [PATCH] decl.c (gnat_to_gnu_entity): Branch to common code handling the alignment of discrete types. * gcc-interface/decl.c (gnat_to_gnu_entity) : Branch to common code handling the alignment of discrete types. : Likewise. : Likewise. From-SVN: r161770 --- gcc/ada/ChangeLog | 7 ++++++ gcc/ada/gcc-interface/decl.c | 20 ++++++++-------- gcc/testsuite/ChangeLog | 9 ++++++-- gcc/testsuite/gnat.dg/modular3.adb | 32 ++++++++++++++++++++++++++ gcc/testsuite/gnat.dg/modular3_pkg.ads | 11 +++++++++ 5 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/modular3.adb create mode 100644 gcc/testsuite/gnat.dg/modular3_pkg.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 52bde045832..a13437d4017 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2010-07-03 Eric Botcazou + + * gcc-interface/decl.c (gnat_to_gnu_entity) : + Branch to common code handling the alignment of discrete types. + : Likewise. + : Likewise. + 2010-07-02 Eric Botcazou * gcc-interface/misc.c (gnat_handle_option): Do not populate gnat_argv. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 6952060259d..b5168e79951 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -1496,7 +1496,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* Note that the bounds are updated at the end of this function to avoid an infinite recursion since they refer to the type. */ } - break; + goto discrete_type; case E_Signed_Integer_Type: case E_Ordinary_Fixed_Point_Type: @@ -1504,7 +1504,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* For integer types, just make a signed type the appropriate number of bits. */ gnu_type = make_signed_type (esize); - break; + goto discrete_type; case E_Modular_Integer_Type: { @@ -1543,7 +1543,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_type = gnu_subtype; } } - break; + goto discrete_type; case E_Signed_Integer_Subtype: case E_Enumeration_Subtype: @@ -1632,6 +1632,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnat_to_gnu_type (Original_Array_Type (gnat_entity))); + discrete_type: + /* We have to handle clauses that under-align the type specially. */ if ((Present (Alignment_Clause (gnat_entity)) || (Is_Packed_Array_Type (gnat_entity) @@ -1685,9 +1687,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) relate_alias_sets (gnu_type, gnu_field_type, ALIAS_SET_COPY); - /* Don't notify the field as "addressable", since we won't be taking - it's address and it would prevent create_field_decl from making a - bitfield. */ + /* Don't declare the field as addressable since we won't be taking + its address and this would prevent create_field_decl from making + a bitfield. */ gnu_field = create_field_decl (get_identifier ("OBJECT"), gnu_field_type, gnu_type, NULL_TREE, bitsize_zero_node, 1, 0); @@ -1736,9 +1738,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) TYPE_ALIGN (gnu_type) = align; relate_alias_sets (gnu_type, gnu_field_type, ALIAS_SET_COPY); - /* Don't notify the field as "addressable", since we won't be taking - it's address and it would prevent create_field_decl from making a - bitfield. */ + /* Don't declare the field as addressable since we won't be taking + its address and this would prevent create_field_decl from making + a bitfield. */ gnu_field = create_field_decl (get_identifier ("F"), gnu_field_type, gnu_type, NULL_TREE, bitsize_zero_node, 1, 0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6da1f96ef4a..fb71e59a560 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-03 Eric Botcazou + + * gnat.dg/modular3.adb: New test. + * gnat.dg/modular3_pkg.ads: New helper. + 2010-07-03 Iain Sandoe Mikael Pettersson @@ -19,12 +24,12 @@ 2010-07-02 Daniel Jacobowitz Julian Brown - Sandra Loosemore + Sandra Loosemore * gcc.c-torture/execute/20100416-1.c: New test case. 2010-07-02 Julian Brown - Sandra Loosemore + Sandra Loosemore PR target/43703 diff --git a/gcc/testsuite/gnat.dg/modular3.adb b/gcc/testsuite/gnat.dg/modular3.adb new file mode 100644 index 00000000000..539edcaf4d4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/modular3.adb @@ -0,0 +1,32 @@ +-- { dg-do run } + +with Modular3_Pkg; use Modular3_Pkg; + +procedure Modular3 is + + function F1 (A : Int16_T) return Int16_T is + begin + return A + 128; + end; + + function F2 (B : Mod16_T) return Mod16_T is + begin + return B + 128; + end; + + A : Int16_T := 16384; + B : Mod16_T := 65504; + +begin + + A := F1 (A); + if A /= 16512 then + raise Program_Error; + end if; + + B := F2 (B); + if B /= 96 then + raise Program_Error; + end if; + +end Modular3; diff --git a/gcc/testsuite/gnat.dg/modular3_pkg.ads b/gcc/testsuite/gnat.dg/modular3_pkg.ads new file mode 100644 index 00000000000..85cf6a8bfaa --- /dev/null +++ b/gcc/testsuite/gnat.dg/modular3_pkg.ads @@ -0,0 +1,11 @@ +package Modular3_Pkg is + + type Int16_T is range -32768 .. 32767; + for Int16_T'Size use 16; + for Int16_T'Alignment use 1; + + type Mod16_T is mod 2 ** 16; + for Mod16_T'Size use 16; + for Mod16_T'Alignment use 1; + +end Modular3_Pkg;