OSDN Git Service

PR go/47158
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Jan 2011 05:33:32 +0000 (05:33 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Jan 2011 05:33:32 +0000 (05:33 +0000)
PR go/47159
PR go/47160
PR go/47161
Fix space leaks.
Patch from Ettl Martin.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168504 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/gogo-tree.cc
gcc/go/gofrontend/import-archive.cc
gcc/go/gofrontend/import.cc

index a7b5bbf..550d1ae 100644 (file)
@@ -8726,7 +8726,10 @@ Call_expression::do_get_tree(Translate_context* context)
                                                       arg_val,
                                                       location);
          if (args[i] == error_mark_node)
-           return error_mark_node;
+           {
+             delete[] args;
+             return error_mark_node;
+           }
        }
       gcc_assert(pp == params->end());
       gcc_assert(i == nargs);
@@ -8734,7 +8737,10 @@ Call_expression::do_get_tree(Translate_context* context)
 
   tree rettype = TREE_TYPE(TREE_TYPE(fntype->get_tree(gogo)));
   if (rettype == error_mark_node)
-    return error_mark_node;
+    {
+      delete[] args;
+      return error_mark_node;
+    }
 
   tree fn;
   if (has_closure)
@@ -8749,7 +8755,10 @@ Call_expression::do_get_tree(Translate_context* context)
     gcc_unreachable();
 
   if (fn == error_mark_node || TREE_TYPE(fn) == error_mark_node)
-    return error_mark_node;
+    {
+      delete[] args;
+      return error_mark_node;
+    }
 
   // This is to support builtin math functions when using 80387 math.
   tree fndecl = fn;
index 05a701f..bcb2519 100644 (file)
@@ -2832,7 +2832,11 @@ Gogo::call_builtin(tree* pdecl, source_location location, const char* name,
       types[i] = va_arg(ap, tree);
       args[i] = va_arg(ap, tree);
       if (types[i] == error_mark_node || args[i] == error_mark_node)
-       return error_mark_node;
+       {
+         delete[] types;
+         delete[] args;
+         return error_mark_node;
+       }
     }
   va_end(ap);
 
index 4356d82..07ac01a 100644 (file)
@@ -180,16 +180,16 @@ Archive_file::initialize()
     }
   if (filename == "/")
     {
-      char* buf = new char[size];
-      if (::read(this->fd_, buf, size) != size)
+      char* rdbuf = new char[size];
+      if (::read(this->fd_, rdbuf, size) != size)
        {
          error_at(this->location_, "%s: could not read extended names",
                   filename.c_str());
-         delete buf;
+         delete[] rdbuf;
          return false;
        }
-      this->extended_names_.assign(buf, size);
-      delete buf;
+      this->extended_names_.assign(rdbuf, size);
+      delete[] rdbuf;
     }
 
   return true;
index 0f0da89..ec27aba 100644 (file)
@@ -244,11 +244,13 @@ Import::find_object_export_data(const std::string& filename,
   if (c < 0)
     {
       error_at(location, "read %s failed: %m", filename.c_str());
+      delete[] buf;
       return NULL;
     }
   if (c < sec_length)
     {
       error_at(location, "%s: short read", filename.c_str());
+      delete[] buf;
       return NULL;
     }