decl.c (gnat_to_gnu_entity): Branch to common code handling the alignment of discrete...
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 3 Jul 2010 09:54:13 +0000 (09:54 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 3 Jul 2010 09:54:13 +0000 (09:54 +0000)
* 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

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/modular3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/modular3_pkg.ads [new file with mode: 0644]

index 52bde04..a13437d 100644 (file)
@@ -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.
index 6952060..b5168e7 100644 (file)
@@ -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
+            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
+            bitfield.  */
          gnu_field
            = create_field_decl (get_identifier ("F"), gnu_field_type,
                                 gnu_type, NULL_TREE, bitsize_zero_node, 1, 0);
index 6da1f96..fb71e59 100644 (file)
@@ -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>
 
 
 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
 
diff --git a/gcc/testsuite/gnat.dg/modular3.adb b/gcc/testsuite/gnat.dg/modular3.adb
new file mode 100644 (file)
index 0000000..539edca
--- /dev/null
@@ -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 (file)
index 0000000..85cf6a8
--- /dev/null
@@ -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;