From 7615883aaa47ab3268a344a708b7f61c1affe86a Mon Sep 17 00:00:00 2001
From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 22 Sep 2006 15:43:27 +0000
Subject: [PATCH] 2006-09-22  Richard Guenther  <rguenther@suse.de>

	PR middle-end/28964
	* cfgexpand.c (stack_var_size_cmp): Use DECL_UID to make
	sort of stack variables stable.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117146 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog   | 6 ++++++
 gcc/cfgexpand.c | 8 ++++++++
 2 files changed, 14 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 190d3873bd73..87c39b13f297 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-22  Richard Guenther  <rguenther@suse.de>
+
+	PR middle-end/28964
+	* cfgexpand.c (stack_var_size_cmp): Use DECL_UID to make
+	sort of stack variables stable.
+
 2006-09-22  Peter Bergner <bergner@vnet.ibm.com>
 
 	PR middle-end/28690
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 9839d0983755..4cc1047fadfd 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -350,11 +350,19 @@ stack_var_size_cmp (const void *a, const void *b)
 {
   HOST_WIDE_INT sa = stack_vars[*(const size_t *)a].size;
   HOST_WIDE_INT sb = stack_vars[*(const size_t *)b].size;
+  unsigned int uida = DECL_UID (stack_vars[*(const size_t *)a].decl);
+  unsigned int uidb = DECL_UID (stack_vars[*(const size_t *)b].decl);
 
   if (sa < sb)
     return -1;
   if (sa > sb)
     return 1;
+  /* For stack variables of the same size use the uid of the decl
+     to make the sort stable.  */
+  if (uida < uidb)
+    return -1;
+  if (uida > uidb)
+    return 1;
   return 0;
 }
 
-- 
GitLab