expr.c (expand_expr, [...]): Don't honor flag_force_addr for modifier != EXPAND_CONST...
authorHans-Peter Nilsson <hp@axis.com>
Fri, 14 Dec 2001 02:16:33 +0000 (02:16 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Fri, 14 Dec 2001 02:16:33 +0000 (02:16 +0000)
* 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

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/20011113-1.c [new file with mode: 0644]

index 74563e64da821d1a6308db2cad590110785078db..a4ef2067be25f934df93d13525673e654c4b7615 100644 (file)
@@ -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
index 5884217e90ec1da9ebb9fda105b962d0a5bcda6c..9e5bf955adbece6616450071b6e45cbe13bb72c8 100644 (file)
@@ -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
index 60ace64e508b8f5c1dad0c54ab9996b6ba1e2f4f..957cb049774625d80a947ddef828a6e276564bec 100644 (file)
@@ -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 (file)
index 0000000..3f40160
--- /dev/null
@@ -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}
+};