OSDN Git Service

PR java/10145
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 Mar 2003 20:25:11 +0000 (20:25 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 Mar 2003 20:25:11 +0000 (20:25 +0000)
        * stor-layout.c (update_alignment_for_field): Respect
        DECL_USER_ALIGN for zero-length bitfields, too.
        * c-decl.c (finish_struct): Don't set DECL_ALIGN for normal
        fields.
        * cp/class.c (check_field_decl): Don't set DECL_ALIGN.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65103 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/stor-layout.c
gcc/testsuite/gcc.dg/align-1.c [new file with mode: 0644]

index 076192b..545b048 100644 (file)
@@ -1,3 +1,11 @@
+2003-03-31  Jason Merrill  <jason@redhat.com>
+
+       PR java/10145
+       * stor-layout.c (update_alignment_for_field): Respect
+       DECL_USER_ALIGN for zero-length bitfields, too.
+       * c-decl.c (finish_struct): Don't set DECL_ALIGN for normal
+       fields.
+
 2003-03-31  Matt Austern  <austern@apple.com>
 
        * cpppch.c (struct cpp_savedstate): Add defs and n_defs members.
index d52823b..c9dd711 100644 (file)
@@ -5257,18 +5257,6 @@ finish_struct (t, fieldlist, attributes)
            }
        }
 
-      else if (TREE_TYPE (x) != error_mark_node)
-       {
-         unsigned int min_align = (DECL_PACKED (x) ? BITS_PER_UNIT
-                                   : TYPE_ALIGN (TREE_TYPE (x)));
-
-         /* Non-bit-fields are aligned for their type, except packed
-            fields which require only BITS_PER_UNIT alignment.  */
-         DECL_ALIGN (x) = MAX (DECL_ALIGN (x), min_align);
-         if (! DECL_PACKED (x))
-           DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
-       }
-
       DECL_INITIAL (x) = 0;
 
       /* Detect flexible array member in an invalid context.  */
index 93df69d..6eb6d81 100644 (file)
@@ -1,3 +1,8 @@
+2003-03-31  Jason Merrill  <jason@redhat.com>
+
+       PR java/10145
+       * class.c (check_field_decl): Don't set DECL_ALIGN.
+
 2003-03-30  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/7647
index e899c57..01d4dd2 100644 (file)
@@ -3057,15 +3057,6 @@ check_field_decl (tree field,
        cp_error_at ("multiple fields in union `%T' initialized");
       *any_default_members = 1;
     }
-
-  /* Non-bit-fields are aligned for their type, except packed fields
-     which require only BITS_PER_UNIT alignment.  */
-  DECL_ALIGN (field) = MAX (DECL_ALIGN (field), 
-                           (DECL_PACKED (field) 
-                            ? BITS_PER_UNIT
-                            : TYPE_ALIGN (TREE_TYPE (field))));
-  if (! DECL_PACKED (field))
-    DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (TREE_TYPE (field));
 }
 
 /* Check the data members (both static and non-static), class-scoped
index 6caaf5f..af02cad 100644 (file)
@@ -746,7 +746,8 @@ update_alignment_for_field (rli, field, known_align)
     {
       /* A zero-length bit-field affects the alignment of the next
         field.  */
-      if (!DECL_PACKED (field) && integer_zerop (DECL_SIZE (field)))
+      if (!DECL_PACKED (field) && !user_align
+         && integer_zerop (DECL_SIZE (field)))
        {
          desired_align = TYPE_ALIGN (type);
 #ifdef ADJUST_FIELD_ALIGN
diff --git a/gcc/testsuite/gcc.dg/align-1.c b/gcc/testsuite/gcc.dg/align-1.c
new file mode 100644 (file)
index 0000000..cb6dcab
--- /dev/null
@@ -0,0 +1,24 @@
+// PR java/10145
+// Test that requesting an alignment of 1 does not increase the alignment
+// of a long long field.
+
+// { dg-do run }
+
+struct A
+{
+  char c;
+  long long i;
+};
+
+struct B
+{
+  char c;
+  long long i __attribute ((__aligned__ (1)));
+};
+
+int main ()
+{
+  if (sizeof (struct A) != sizeof (struct B))
+    abort ();
+  return 0;
+}