aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c-common.c1
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20050107-1.c25
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aa0bbff..2979ebe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ * c-common.c (handle_mode_attribute): For ENUMERAL_TYPE, also copy
+ TYPE_MODE.
+
2005-01-07 David Edelsohn <edelsohn@gnu.org>
PR target/13674
diff --git a/gcc/c-common.c b/gcc/c-common.c
index bb81a6f..a699cbc 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -4341,6 +4341,7 @@ handle_mode_attribute (tree *node, tree name, tree args,
TYPE_MAX_VALUE (type) = TYPE_MAX_VALUE (typefm);
TYPE_SIZE (type) = TYPE_SIZE (typefm);
TYPE_SIZE_UNIT (type) = TYPE_SIZE_UNIT (typefm);
+ TYPE_MODE (type) = TYPE_MODE (typefm);
if (!TYPE_USER_ALIGN (type))
TYPE_ALIGN (type) = TYPE_ALIGN (typefm);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 46a2093..9d46008 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/20050107-1.c: New test.
+
2005-01-07 Nathan Sidwell <nathan@codesourcery.com>
PR c++/19298
diff --git a/gcc/testsuite/gcc.c-torture/execute/20050107-1.c b/gcc/testsuite/gcc.c-torture/execute/20050107-1.c
new file mode 100644
index 0000000..903c54a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20050107-1.c
@@ -0,0 +1,25 @@
+typedef enum { C = 1, D = 2 } B;
+extern void abort (void);
+
+struct S
+{
+ B __attribute__ ((mode (byte))) a;
+ B __attribute__ ((mode (byte))) b;
+};
+
+void
+foo (struct S *x)
+{
+ if (x->a != C || x->b != D)
+ abort ();
+}
+
+int
+main (void)
+{
+ struct S s;
+ s.a = C;
+ s.b = D;
+ foo (&s);
+ return 0;
+}