From 270ca283ffb2fb8ce7cfbb2e07a5edcf42b17592 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 30 Dec 2016 07:08:00 +0000 Subject: [PATCH] compiler: use more accurate array type in Gogo::register_gc_vars The length of the roots array in Gogo::register_gc_vars was being computed incorrectly, potentially leading to type clashes in the back end. Compute an accurate length for this array ahead of time. Reviewed-on: https://go-review.googlesource.com/34624 From-SVN: r243974 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/gogo.cc | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b9c62808b67..9392c940d99 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -9a89f32811e6b3a29e22dda46e9c23811f562876 +d9be5f5d7907cbc169424fe2b8532cc3919cad5b The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 51de4283946..ff82f11948f 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -740,9 +740,9 @@ Gogo::register_gc_vars(const std::vector& var_gc, "__size", uint_type); Location builtin_loc = Linemap::predeclared_location(); - Expression* length = Expression::make_integer_ul(var_gc.size(), NULL, - builtin_loc); - + unsigned roots_len = var_gc.size() + this->gc_roots_.size() + 1; + Expression* length = Expression::make_integer_ul(roots_len, NULL, + builtin_loc); Array_type* root_array_type = Type::make_array_type(root_type, length); Type* ptdt = Type::make_type_descriptor_ptr_type(); Struct_type* root_list_type = -- 2.30.2