summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-05 21:37:40 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-05 21:37:40 +0000
commitbba9e08beb32f5ca6a9f69a818a2c9f71bd75b67 (patch)
tree4f531dccb304dcf5e79a0af65d35fba1caaf1761
parent03c6509158a5c6dc7e491eecbf84a73a53f7c591 (diff)
downloadppe42-gcc-bba9e08beb32f5ca6a9f69a818a2c9f71bd75b67.tar.gz
ppe42-gcc-bba9e08beb32f5ca6a9f69a818a2c9f71bd75b67.zip
* expr.c (expand_assignment): Disable the bitfield += optimizations.
* gcc.c-torture/execute/20040629-1.c (FIELDS1, FIELDS2): Define to nothing if not yet defined. Use it in b, c and d type definitions. * gcc.c-torture/execute/20040705-1.c: New test. * gcc.c-torture/execute/20040705-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84133 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/expr.c4
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20040629-1.c13
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20040705-1.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20040705-2.c2
6 files changed, 28 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b6a628fcc7..7e4ae9b2e2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2004-07-05 Jakub Jelinek <jakub@redhat.com>
+
+ * expr.c (expand_assignment): Disable the bitfield += optimizations.
+
2004-07-05 Joseph S. Myers <jsm@polyomino.org.uk>
* doc/sourcebuild.texi: Revert previous patch.
diff --git a/gcc/expr.c b/gcc/expr.c
index 3c15a7bde7a..b5feed7a19f 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3802,7 +3802,9 @@ expand_assignment (tree to, tree from, int want_value)
MEM_KEEP_ALIAS_SET_P (to_rtx) = 1;
}
- while (mode1 == VOIDmode && !want_value
+ /* Disabled temporarily. GET_MODE (to_rtx) is often not the right
+ mode. */
+ while (0 && mode1 == VOIDmode && !want_value
&& bitpos + bitsize <= BITS_PER_WORD
&& bitsize < BITS_PER_WORD
&& GET_MODE_BITSIZE (GET_MODE (to_rtx)) <= BITS_PER_WORD
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e12cd88c26f..2a29944a62a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2004-07-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/20040629-1.c (FIELDS1, FIELDS2): Define to
+ nothing if not yet defined. Use it in b, c and d type definitions.
+ * gcc.c-torture/execute/20040705-1.c: New test.
+ * gcc.c-torture/execute/20040705-2.c: New test.
+
2004-07-05 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/2518
diff --git a/gcc/testsuite/gcc.c-torture/execute/20040629-1.c b/gcc/testsuite/gcc.c-torture/execute/20040629-1.c
index 9180d6c2920..6b3e9069240 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20040629-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/20040629-1.c
@@ -4,9 +4,16 @@
extern void abort (void);
extern void exit (int);
-struct { unsigned int i : 6, j : 11, k : 15; } b;
-struct { unsigned int i : 5, j : 1, k : 26; } c;
-struct { unsigned int i : 16, j : 8, k : 8; } d;
+#ifndef FIELDS1
+#define FIELDS1
+#endif
+#ifndef FIELDS2
+#define FIELDS2
+#endif
+
+struct { FIELDS1 unsigned int i : 6, j : 11, k : 15; FIELDS2 } b;
+struct { FIELDS1 unsigned int i : 5, j : 1, k : 26; FIELDS2 } c;
+struct { FIELDS1 unsigned int i : 16, j : 8, k : 8; FIELDS2 } d;
unsigned int ret1 (void) { return b.i; }
unsigned int ret2 (void) { return b.j; }
diff --git a/gcc/testsuite/gcc.c-torture/execute/20040705-1.c b/gcc/testsuite/gcc.c-torture/execute/20040705-1.c
new file mode 100644
index 00000000000..a9ba88ec2e9
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20040705-1.c
@@ -0,0 +1,2 @@
+#define FIELDS1 long long l;
+#include "20040629-1.c"
diff --git a/gcc/testsuite/gcc.c-torture/execute/20040705-2.c b/gcc/testsuite/gcc.c-torture/execute/20040705-2.c
new file mode 100644
index 00000000000..a36fb6a681e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20040705-2.c
@@ -0,0 +1,2 @@
+#define FIELDS2 long long l;
+#include "20040629-1.c"
OpenPOWER on IntegriCloud