aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2001-12-14 02:16:33 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2001-12-14 02:16:33 +0000
commit05c8e58b272aa126a2a3d4f66e95df055bf12bfb (patch)
tree2d5f3cafc7c251c04b6d58417c531a4995917206 /gcc
parent1ed1b4fbd88c56569d7c3543585769f4efd6b69a (diff)
downloadgcc-05c8e58b272aa126a2a3d4f66e95df055bf12bfb.zip
gcc-05c8e58b272aa126a2a3d4f66e95df055bf12bfb.tar.gz
gcc-05c8e58b272aa126a2a3d4f66e95df055bf12bfb.tar.bz2
expr.c (expand_expr, [...]): Don't honor flag_force_addr for modifier != EXPAND_CONST_ADDRESS...
* expr.c (expand_expr, case ADDR_EXPR): Don't honor flag_force_addr for modifier != EXPAND_CONST_ADDRESS, modifier != EXPAND_INITIALIZER and modifier != EXPAND_SUM. * gcc.dg/20011113-1.c: New test. From-SVN: r47984
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/20011113-1.c16
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 74563e6..a4ef206 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2001-12-13 Hans-Peter Nilsson <hp@axis.com>
+
+ * expr.c (expand_expr, case ADDR_EXPR): Don't honor
+ flag_force_addr for modifier != EXPAND_CONST_ADDRESS,
+ modifier != EXPAND_INITIALIZER and modifier != EXPAND_SUM.
+
Thu Dec 13 20:30:08 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* expr.c (copy_blkmode_from_reg): Add missing braces to eliminate
diff --git a/gcc/expr.c b/gcc/expr.c
index 5884217..9e5bf95 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8547,7 +8547,11 @@ expand_expr (exp, target, tmode, modifier)
op0 = force_operand (XEXP (op0, 0), target);
}
- if (flag_force_addr && GET_CODE (op0) != REG)
+ if (flag_force_addr
+ && GET_CODE (op0) != REG
+ && modifier != EXPAND_CONST_ADDRESS
+ && modifier != EXPAND_INITIALIZER
+ && modifier != EXPAND_SUM)
op0 = force_reg (Pmode, op0);
if (GET_CODE (op0) == REG
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 60ace64..957cb04 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-12-13 Hans-Peter Nilsson <hp@axis.com>
+
+ * gcc.dg/20011113-1.c: New test.
+
2001-12-13 John David Anglin <dave@hiauly1.hia.nrc.ca>
* g++.old-deja/g++.jason/template31.C: Remove templates for classes
diff --git a/gcc/testsuite/gcc.dg/20011113-1.c b/gcc/testsuite/gcc.dg/20011113-1.c
new file mode 100644
index 0000000..3f40160
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20011113-1.c
@@ -0,0 +1,16 @@
+/* Copyright (C) 2001 Free Software Foundation.
+ by Hans-Peter Nilsson <hp@axis.com> */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -fforce-addr" } */
+
+const char foo[] = "fum";
+const struct fi
+{
+ const char *const in;
+ const char *const out;
+ const int flags;
+} fie[] = {
+ {"nw", " new", 0},
+ {"dl", foo, 1}
+};