]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/36977 (Incorrect debug info for stack variables with stack alignment)
authorH.J. Lu <hongjiu.lu@intel.com>
Thu, 31 Jul 2008 21:28:54 +0000 (21:28 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Thu, 31 Jul 2008 21:28:54 +0000 (14:28 -0700)
2008-07-31  H.J. Lu  <hongjiu.lu@intel.com>

PR debug/36977
* cfgexpand.c (expand_stack_alignment): Set stack_realign_tried.

* dwarf2out.c (based_loc_descr): Check crtl->stack_realign_tried
for stack alignment.

* function.h (rtl_data): Add stack_realign_tried.  Update
comments.

From-SVN: r138438

gcc/ChangeLog
gcc/cfgexpand.c
gcc/dwarf2out.c
gcc/function.h

index b7310f3d383ad54591908cdd45155d249d1ce057..3823eb634ae5c5465c3af47710d5ff3b72f93ca2 100644 (file)
@@ -1,3 +1,14 @@
+2008-07-31  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR debug/36977
+       * cfgexpand.c (expand_stack_alignment): Set stack_realign_tried.
+
+       * dwarf2out.c (based_loc_descr): Check crtl->stack_realign_tried
+       for stack alignment.
+
+       * function.h (rtl_data): Add stack_realign_tried.  Update
+       comments.
+
 2008-07-31  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * config/sh/sh.c (sh_canonical_va_list_type): Remove.
index 623ad85afb4d269724f9e34e59960ad4948a2b5a..c9faa49d4ab4ef2f6db0203179a585086668e878 100644 (file)
@@ -2217,6 +2217,7 @@ expand_stack_alignment (void)
 
   crtl->stack_realign_needed
     = INCOMING_STACK_BOUNDARY < crtl->stack_alignment_estimated;
+  crtl->stack_realign_tried = crtl->stack_realign_needed;
 
   crtl->stack_realign_processed = true;
 
index 1219892f2002dcb2e7f286fc0aaaf4eec10ddaeb..7e29d2af746e35382365f001879613aa0d994690 100644 (file)
@@ -9453,8 +9453,7 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
             pointer + offset to access stack variables.  If stack
             is aligned without drap, use stack pointer + offset to
             access stack variables.  */
-         if (fde
-             && fde->stack_realign
+         if (crtl->stack_realign_tried
              && cfa.reg == HARD_FRAME_POINTER_REGNUM
              && reg == frame_pointer_rtx)
            {
index ebba29f3862658ebd9214d3abc1c2abb96f1efd3..1153fb0b4c4ea8a6f0e08a6657034e65f75ea923 100644 (file)
@@ -417,20 +417,25 @@ struct rtl_data GTY(())
   /* When set, expand should optimize for speed.  */
   bool maybe_hot_insn_p;
 
-  /* Nonzero if function stack realignment is needed. This flag may be
-     set twice: before and after reload. It is set before reload wrt
-     stack alignment estimation before reload. It will be changed after 
-     reload if by then criteria of stack realignment is different. 
+  /* Nonzero if function stack realignment is needed.  This flag may be
+     set twice: before and after reload.  It is set before reload wrt
+     stack alignment estimation before reload.  It will be changed after
+     reload if by then criteria of stack realignment is different.
      The value set after reload is the accurate one and is finalized.  */
   bool stack_realign_needed;
 
+  /* Nonzero if function stack realignment is tried.  This flag is set
+     only once before reload.  It affects register elimination.  This
+     is used to generate DWARF debug info for stack variables.  */
+  bool stack_realign_tried;
+
   /* Nonzero if function being compiled needs dynamic realigned
      argument pointer (drap) if stack needs realigning.  */
   bool need_drap;
 
   /* Nonzero if function stack realignment estimation is done, namely
-     stack_realign_needed flag has been set before reload wrt
-     estimated stack alignment info.  */
+     stack_realign_needed flag has been set before reload wrt estimated
+     stack alignment info.  */
   bool stack_realign_processed;
 
   /* Nonzero if function stack realignment has been finalized, namely