diff options
-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; } |