From: Ian Lance Taylor Date: Wed, 5 Jan 2011 05:33:32 +0000 (+0000) Subject: re PR go/47158 ([cppcheck][PATCH] found a memory leaks in gcc/gcc/go/gofrontend/gogo... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6452b112019e560f99b289ca74528fb80943445c;p=gcc.git re PR go/47158 ([cppcheck][PATCH] found a memory leaks in gcc/gcc/go/gofrontend/gogo-tree.cc) PR go/47158 PR go/47159 PR go/47160 PR go/47161 Fix space leaks. Patch from Ettl Martin. From-SVN: r168504 --- diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index a7b5bbf032a..550d1aea0ab 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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; diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc index 05a701feffc..bcb25191bba 100644 --- a/gcc/go/gofrontend/gogo-tree.cc +++ b/gcc/go/gofrontend/gogo-tree.cc @@ -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); diff --git a/gcc/go/gofrontend/import-archive.cc b/gcc/go/gofrontend/import-archive.cc index 4356d82cab2..07ac01a44ba 100644 --- a/gcc/go/gofrontend/import-archive.cc +++ b/gcc/go/gofrontend/import-archive.cc @@ -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; diff --git a/gcc/go/gofrontend/import.cc b/gcc/go/gofrontend/import.cc index 0f0da89a018..ec27aba4d66 100644 --- a/gcc/go/gofrontend/import.cc +++ b/gcc/go/gofrontend/import.cc @@ -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; }