diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8afdf058d3b3c2cc6c9a12d6047e8d830868ed0d..aee4e04ce5665b857b02bf07985f0f027054f5d4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
 2013-02-27  Jakub Jelinek  <jakub@redhat.com>
 
+	PR middle-end/56461
+	* df-scan.c (df_insn_delete): Use df_scan_free_mws_vec before
+	pool_free.
+	(df_insn_rescan_debug_internal): Use df_scan_free_mws_vec before
+	overwriting it.
+
 	PR middle-end/56461
 	* ipa-cp.c (decide_whether_version_node): Call vec_free on
 	known_aggs[i].items and release known_aggs vector.
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 2928776dfcf253996ad8dcad747b0c5bc9a94a87..931fa2c7e4800e0c92fc8bc60e95d06f9872448a 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -1153,6 +1153,7 @@ df_insn_delete (basic_block bb, unsigned int uid)
 	  df_ref_chain_delete (insn_info->defs);
 	  df_ref_chain_delete (insn_info->uses);
 	  df_ref_chain_delete (insn_info->eq_uses);
+	  df_scan_free_mws_vec (insn_info->mw_hardregs);
 	}
       pool_free (problem_data->insn_pool, insn_info);
       DF_INSN_UID_SET (uid, NULL);
@@ -1332,6 +1333,7 @@ df_insn_rescan_debug_internal (rtx insn)
   df_ref_chain_delete (insn_info->defs);
   df_ref_chain_delete (insn_info->uses);
   df_ref_chain_delete (insn_info->eq_uses);
+  df_scan_free_mws_vec (insn_info->mw_hardregs);
 
   insn_info->defs = df_null_ref_rec;
   insn_info->uses = df_null_ref_rec;