------- Comment #1 from rguenth at gcc dot gnu dot org  2009-11-20 15:33 -------
Confirmed.  Sth as simple as

Index: gcc/expr.c
===================================================================
--- gcc/expr.c  (revision 154364)
+++ gcc/expr.c  (working copy)
@@ -6834,7 +6834,8 @@ expand_expr_addr_expr_1 (tree exp, rtx t
   /* ??? This should be considered a front-end bug.  We should not be
      generating ADDR_EXPR of something that isn't an LVALUE.  The only
      exception here is STRING_CST.  */
-  if (CONSTANT_CLASS_P (exp))
+  if (CONSTANT_CLASS_P (exp)
+      || (TREE_CODE (exp) == ADDR_EXPR && TREE_CONSTANT (exp)))
     return XEXP (expand_expr_constant (exp, 0, modifier), 0);

   /* Everything must be something allowed by is_gimple_addressable.  */


might fix it, though the recursion in this function for CONST_DECLs
make it a bit convoluted to call it obvious.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
          Component|fortran                     |middle-end
     Ever Confirmed|0                           |1
           Keywords|                            |ice-on-valid-code
      Known to fail|                            |4.5.0
   Last reconfirmed|0000-00-00 00:00:00         |2009-11-20 15:33:46
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42119

Reply via email to