diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4ebe5039cd24adb8fbf42fb68b9eae708aec3b77..0ef9eb7068b0a5777d2a932cb02027eeca675dc9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,9 +1,14 @@
-2013-02-27  Edgar E. Iglesias <edgar.iglesias@gmail.com>
+2013-02-27  Jakub Jelinek  <jakub@redhat.com>
+
+	PR middle-end/56461
+	* ipa-reference.c (propagate): Free node_info even for alias nodes.
+
+2013-02-27  Edgar E. Iglesias  <edgar.iglesias@gmail.com>
 
-	*  config/microblaze/microblaze.c (microblaze_emit_compare):
-	Use xor for EQ/NE comparisions
-	*  config/microblaze/microblaze.md (cstoresf4): Add constraints
-	(cbranchsf4): Adjust operator to comparison_operator
+	* config/microblaze/microblaze.c (microblaze_emit_compare):
+	Use xor for EQ/NE comparisions.
+	* config/microblaze/microblaze.md (cstoresf4): Add constraints
+	(cbranchsf4): Adjust operator to comparison_operator.
 
 2013-02-27  Jakub Jelinek  <jakub@redhat.com>
 
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 98c2056839ca70d87fef86d0a32228316525d538..f3c483f67f901516a4b2be65f4cc3af6fde497ba 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -834,12 +834,10 @@ propagate (void)
       ipa_reference_global_vars_info_t node_g;
       ipa_reference_optimization_summary_t opt;
 
-      if (node->alias)
-        continue;
-
       node_info = get_reference_vars_info (node);
-      if (cgraph_function_body_availability (node) > AVAIL_OVERWRITABLE
-	  || (flags_from_decl_or_type (node->symbol.decl) & ECF_LEAF))
+      if (!node->alias
+	  && (cgraph_function_body_availability (node) > AVAIL_OVERWRITABLE
+	      || (flags_from_decl_or_type (node->symbol.decl) & ECF_LEAF)))
 	{
 	  node_g = &node_info->global;