gcc/
	PR middle-end/53698
	* expr.c (expand_expr_addr_expr_1): Convert to tmode before
	performing an addition.
gcc/testsuite/
	PR middle-end/53698
	* gcc.target/i386/pr53698.c: New test.
From-SVN: r188725
+2012-06-18  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       PR middle-end/53698
+       * expr.c (expand_expr_addr_expr_1): Convert to tmode before
+       performing an addition.
+
 2012-06-17  Steven Bosscher  <steven@gcc.gnu.org>
 
        * output.h (split_double): Move prototype to rtl.h.
 
         of such an object.  */
       gcc_assert ((bitpos % BITS_PER_UNIT) == 0);
 
+      result = convert_memory_address_addr_space (tmode, result, as);
       result = plus_constant (tmode, result, bitpos / BITS_PER_UNIT);
       if (modifier < EXPAND_SUM)
        result = force_operand (result, target);
 
+2012-06-18  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       PR middle-end/53698
+       * gcc.target/i386/pr53698.c: New test.
+
 2012-06-17  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.target/i386/pr33329.c (f): Increase tabs array to 1024.
 
--- /dev/null
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-O -mx32 -maddress-mode=long -fno-tree-dominator-opts" } */
+
+extern char foo[];
+
+void
+test2 (void)
+{
+  int s;
+  for (s = 0;; ++s)
+    {
+      if (foo[s] != s)
+       __builtin_abort ();
+      foo[s] = s;
+    }
+}