Index: expr.c
===================================================================
--- expr.c.orig	2012-05-25 17:03:54.000000000 +0200
+++ expr.c	2012-05-26 16:37:09.000000000 +0200
@@ -9922,7 +9922,7 @@ expand_expr_real_1 (tree exp, rtx target
 	    tree nt = build_qualified_type (TREE_TYPE (tem),
 					    (TYPE_QUALS (TREE_TYPE (tem))
 					     | TYPE_QUAL_CONST));
-	    memloc = assign_temp (nt, 1, 1, 1);
+	    memloc = assign_temp (nt, 0, 1, 1);
 	    emit_move_insn (memloc, op0);
 	    op0 = memloc;
 	    mem_attrs_from_type = true;
@@ -10425,6 +10425,7 @@ expand_expr_real_1 (tree exp, rtx target
     case POSTDECREMENT_EXPR:
     case LOOP_EXPR:
     case EXIT_EXPR:
+    case COMPOUND_LITERAL_EXPR:
       /* Lowered by gimplify.c.  */
       gcc_unreachable ();
 
@@ -10439,7 +10440,7 @@ expand_expr_real_1 (tree exp, rtx target
       return expand_expr_real (treeop0, original_target, tmode,
 			       modifier, alt_rtl);
 
-    case COMPOUND_LITERAL_EXPR:
+#if 0
       {
 	/* Initialize the anonymous variable declared in the compound
 	   literal, then return the variable.  */
@@ -10459,6 +10460,7 @@ expand_expr_real_1 (tree exp, rtx target
 	return expand_expr_real (decl, original_target, tmode,
 				 modifier, alt_rtl);
       }
+#endif
 
     default:
       return expand_expr_real_2 (&ops, target, tmode, modifier);
Index: function.c
===================================================================
--- function.c.orig	2012-05-25 17:03:13.000000000 +0200
+++ function.c	2012-05-26 16:37:08.000000000 +0200
@@ -4788,11 +4788,8 @@ expand_function_start (tree subr)
       tree t_save;
       rtx r_save;
 
-      /* ??? We need to do this save early.  Unfortunately here is
-	 before the frame variable gets declared.  Help out...  */
       tree var = TREE_OPERAND (cfun->nonlocal_goto_save_area, 0);
-      if (!DECL_RTL_SET_P (var))
-	expand_decl (var);
+      gcc_assert (DECL_RTL_SET_P (var));
 
       t_save = build4 (ARRAY_REF,
 		       TREE_TYPE (TREE_TYPE (cfun->nonlocal_goto_save_area)),
Index: gimple-fold.c
===================================================================
--- gimple-fold.c.orig	2012-05-25 17:03:54.000000000 +0200
+++ gimple-fold.c	2012-05-25 17:20:54.000000000 +0200
@@ -154,6 +154,12 @@ canonicalize_constructor_val (tree cval,
   if (TREE_CODE (cval) == ADDR_EXPR)
     {
       tree base = get_base_address (TREE_OPERAND (cval, 0));
+      if (!base && TREE_CODE (TREE_OPERAND (cval, 0)) == COMPOUND_LITERAL_EXPR)
+	{
+	  base = COMPOUND_LITERAL_EXPR_DECL (TREE_OPERAND (cval, 0));
+	  if (base)
+	    TREE_OPERAND (cval, 0) = base;
+	}
       if (!base)
 	return NULL_TREE;
 
Index: tree-ssa-live.c
===================================================================
--- tree-ssa-live.c.orig	2012-05-25 17:03:54.000000000 +0200
+++ tree-ssa-live.c	2012-05-26 18:24:14.000000000 +0200
@@ -835,6 +835,9 @@ remove_unused_locals (void)
 	    {
 	      if (var_ann (var))
 		remove_referenced_var (var);
+	      if (cfun->nonlocal_goto_save_area
+		  && TREE_OPERAND (cfun->nonlocal_goto_save_area, 0) == var)
+		cfun->nonlocal_goto_save_area = NULL;
 	      continue;
 	    }
 	}
Index: stmt.c
===================================================================
--- stmt.c.orig	2012-05-25 17:03:13.000000000 +0200
+++ stmt.c	2012-05-26 16:37:09.000000000 +0200
@@ -910,6 +910,8 @@ expand_asm_operands (tree string, tree o
 		 at this point.  Ignore it: clearly this *is* a memory.  */
 	    }
 	  else
+	    gcc_unreachable ();
+#if 0
 	    {
 	      warning (0, "use of memory input without lvalue in "
 		       "asm operand %d is deprecated", i + noutputs);
@@ -935,6 +937,7 @@ expand_asm_operands (tree string, tree o
 		  op = memloc;
 		}
 	    }
+#endif
 	}
 
       generating_concat_p = old_generating_concat_p;
@@ -1703,6 +1706,7 @@ expand_decl (tree decl)
      type in case this node is used in a reference.  */
   if (TREE_CODE (decl) == CONST_DECL)
     {
+      gcc_unreachable ();
       DECL_MODE (decl) = TYPE_MODE (type);
       DECL_ALIGN (decl) = TYPE_ALIGN (type);
       DECL_SIZE (decl) = TYPE_SIZE (type);
@@ -1720,6 +1724,7 @@ expand_decl (tree decl)
   if (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
     return;
 
+  gcc_unreachable ();
   /* Create the RTL representation for the variable.  */
 
   if (type == error_mark_node)
Index: c-family/c-common.h
===================================================================
--- c-family/c-common.h.orig	2012-05-25 17:03:13.000000000 +0200
+++ c-family/c-common.h	2012-05-25 17:20:54.000000000 +0200
@@ -544,8 +544,6 @@ extern tree build_modify_expr (location_
 			       location_t, tree, tree);
 extern tree build_indirect_ref (location_t, tree, ref_operator);
 
-extern int c_expand_decl (tree);
-
 extern int field_decl_cmp (const void *, const void *);
 extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
 				  void *);
Index: c-tree.h
===================================================================
--- c-tree.h.orig	2012-05-25 17:03:13.000000000 +0200
+++ c-tree.h	2012-05-25 17:20:54.000000000 +0200
@@ -535,7 +535,6 @@ extern void store_parm_decls (void);
 extern void store_parm_decls_from (struct c_arg_info *);
 extern tree xref_tag (enum tree_code, tree);
 extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree);
-extern int c_expand_decl (tree);
 extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
 				    struct c_declarator *);
 extern struct c_declarator *build_attrs_declarator (tree,
Index: calls.c
===================================================================
--- calls.c.orig	2012-05-25 17:03:13.000000000 +0200
+++ calls.c	2012-05-26 16:37:09.000000000 +0200
@@ -2405,8 +2405,6 @@ expand_call (tree exp, rtx target, int i
 	       specified.  If we were to allocate space on the stack here,
 	       we would have no way of knowing when to free it.  */
 	    rtx d = assign_temp (rettype, 0, 1, 1);
-
-	    mark_temp_addr_taken (d);
 	    structure_value_addr = XEXP (d, 0);
 	    target = 0;
 	  }
Index: ada/gcc-interface/utils.c
===================================================================
--- ada/gcc-interface/utils.c.orig	2012-05-25 17:03:13.000000000 +0200
+++ ada/gcc-interface/utils.c	2012-05-25 17:20:54.000000000 +0200
@@ -2227,8 +2227,6 @@ create_var_decl_1 (tree var_name, tree a
       if (global_bindings_p ())
 	rest_of_decl_compilation (var_decl, true, 0);
     }
-  else
-    expand_decl (var_decl);
 
   return var_decl;
 }
