decl.c (gnat_to_gnu_entity): Branch to common code handling the alignment of discrete types.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Enumeration_Type>: Branch to common code handling the alignment of discrete types. <E_Signed_Integer_Type>: Likewise. <E_Modular_Integer_Type>: Likewise. From-SVN: r161770
This commit is contained in:
parent
cb5eb94e1c
commit
40d1f6afc1
5 changed files with 68 additions and 11 deletions
|
@ -1,3 +1,10 @@
|
|||
2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Enumeration_Type>:
|
||||
Branch to common code handling the alignment of discrete types.
|
||||
<E_Signed_Integer_Type>: Likewise.
|
||||
<E_Modular_Integer_Type>: Likewise.
|
||||
|
||||
2010-07-02 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/misc.c (gnat_handle_option): Do not populate gnat_argv.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/modular3.adb: New test.
|
||||
* gnat.dg/modular3_pkg.ads: New helper.
|
||||
|
||||
2010-07-03 Iain Sandoe <iains@gcc.gnu.org>
|
||||
Mikael Pettersson <mikpe@it.uu.se>
|
||||
|
||||
|
@ -19,12 +24,12 @@
|
|||
|
||||
2010-07-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Julian Brown <julian@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* gcc.c-torture/execute/20100416-1.c: New test case.
|
||||
|
||||
2010-07-02 Julian Brown <julian@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR target/43703
|
||||
|
||||
|
|
32
gcc/testsuite/gnat.dg/modular3.adb
Normal file
32
gcc/testsuite/gnat.dg/modular3.adb
Normal file
|
@ -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;
|
11
gcc/testsuite/gnat.dg/modular3_pkg.ads
Normal file
11
gcc/testsuite/gnat.dg/modular3_pkg.ads
Normal file
|
@ -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;
|
Loading…
Add table
Reference in a new issue