OSDN Git Service

Fix memory leak
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jan 2001 01:08:53 +0000 (01:08 +0000)
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jan 2001 01:08:53 +0000 (01:08 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38811 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/arm.c

index 4e28f23..45338c3 100644 (file)
@@ -1,3 +1,10 @@
+2001-01-08  Nick Clifton  <nickc@redhat.com>
+
+       * config/arm/arm.c (arm_mark_machine_status): Check to see if
+       the machine structure has been allocated.
+       (arm_free_machine_status): New function: Free the machine
+       specific function structure.
+
 2001-01-08  Richard Henderson  <rth@redhat.com>
 
        * jump.c (simplejump_p): Revert last change.
index 5401773..4a34369 100644 (file)
@@ -76,6 +76,7 @@ static Mmode     select_dominance_cc_mode     PARAMS ((rtx, rtx, Hint));
 static Ccstar    shift_op                      PARAMS ((rtx, Hint *));
 static void      arm_init_machine_status       PARAMS ((struct function *));
 static void      arm_mark_machine_status        PARAMS ((struct function *));
+static void      arm_free_machine_status        PARAMS ((struct function *));
 static int       number_of_first_bit_set        PARAMS ((int));
 static void      replace_symbols_in_block       PARAMS ((tree, rtx, rtx));
 static void      thumb_exit                     PARAMS ((FILE *, int, rtx));
@@ -9587,8 +9588,11 @@ arm_mark_machine_status (p)
 {
   machine_function *machine = p->machine;
 
-  ggc_mark_rtx (machine->ra_rtx);
-  ggc_mark_rtx (machine->eh_epilogue_sp_ofs);
+  if (machine)
+    {
+      ggc_mark_rtx (machine->ra_rtx);
+      ggc_mark_rtx (machine->eh_epilogue_sp_ofs);
+    }
 }
 
 static void
@@ -9603,6 +9607,17 @@ arm_init_machine_status (p)
 #endif
 }
 
+static void
+arm_free_machine_status (p)
+     struct function * p;
+{
+  if (p->machine)
+    {
+      free (p->machine);
+      p->machine = NULL;
+    }
+}
+
 /* Return an RTX indicating where the return address to the
    calling function can be found.  */
 rtx
@@ -9650,6 +9665,7 @@ arm_init_expanders ()
   /* Arrange to initialize and mark the machine per-function status.  */
   init_machine_status = arm_init_machine_status;
   mark_machine_status = arm_mark_machine_status;
+  free_machine_status = arm_free_machine_status;
 }
 
 /* Generate the rest of a function's prologue.  */