diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-05 05:33:32 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-05 05:33:32 +0000 |
commit | 6452b112019e560f99b289ca74528fb80943445c (patch) | |
tree | da86d664e308ce5626c93b4bce78a17cc75df4a3 | |
parent | 183440ee5bf5966f231c95b9e2e09a15a40f2e78 (diff) | |
download | gcc-6452b112019e560f99b289ca74528fb80943445c.zip gcc-6452b112019e560f99b289ca74528fb80943445c.tar.gz gcc-6452b112019e560f99b289ca74528fb80943445c.tar.bz2 |
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
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 15 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo-tree.cc | 6 | ||||
-rw-r--r-- | gcc/go/gofrontend/import-archive.cc | 10 | ||||
-rw-r--r-- | gcc/go/gofrontend/import.cc | 2 |
4 files changed, 24 insertions, 9 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index a7b5bbf..550d1aea 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 05a701f..bcb2519 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 4356d82..07ac01a 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 0f0da89..ec27aba 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; } |