diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-10-29 18:14:50 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-10-29 18:14:50 +0000 |
commit | f4a513a98e6341b2d4796752644a27c722612847 (patch) | |
tree | 571dc5d41bd31a1e7befb942446857d17016547b /gcc | |
parent | bdb60a10ac876bd1d68ab7b0b0ff2acc69e0c214 (diff) | |
download | gcc-f4a513a98e6341b2d4796752644a27c722612847.zip gcc-f4a513a98e6341b2d4796752644a27c722612847.tar.gz gcc-f4a513a98e6341b2d4796752644a27c722612847.tar.bz2 |
compiler, reflect, runtime: remove zero field from type descriptor
Type descriptors picked up a zero field because the gc map
implementation used it. However, it's since been dropped by the gc
library. It was never used by gccgo. Drop it now in preparation for
upgrading to the Go 1.5 library.
Reviewed-on: https://go-review.googlesource.com/16486
From-SVN: r229546
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 88 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.h | 20 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 14 |
4 files changed, 4 insertions, 120 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 8d3547b..987bd68 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -57da43e8159bfe1a31e49683c371cf36e2fb6051 +85994dd0a88d1b24b2ddfc9c9ab22ee16c9e8b54 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 363fd5c..6708be9 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -42,9 +42,6 @@ Gogo::Gogo(Backend* backend, Linemap* linemap, int, int pointer_size) pkgpath_(), pkgpath_symbol_(), prefix_(), - zero_value_(NULL), - zero_value_size_(0), - zero_value_align_(0), pkgpath_set_(false), pkgpath_from_option_(false), prefix_from_option_(false), @@ -638,87 +635,6 @@ Gogo::current_bindings() const return this->globals_; } -// Return the special variable used as the zero value of types. - -Named_object* -Gogo::zero_value(Type *type) -{ - if (this->zero_value_ == NULL) - { - Location bloc = Linemap::predeclared_location(); - - // We will change the type later, when we know the size. - Type* byte_type = this->lookup_global("byte")->type_value(); - - Expression* zero = Expression::make_integer_ul(0, NULL, bloc); - Type* array_type = Type::make_array_type(byte_type, zero); - - Variable* var = new Variable(array_type, NULL, true, false, false, bloc); - this->zero_value_ = Named_object::make_variable("go$zerovalue", NULL, - var); - } - - // The zero value will be the maximum required size. - int64_t size; - bool ok = type->backend_type_size(this, &size); - if (!ok) { - go_assert(saw_errors()); - size = 4; - } - if (size > this->zero_value_size_) - this->zero_value_size_ = size; - - int64_t align; - ok = type->backend_type_align(this, &align); - if (!ok) { - go_assert(saw_errors()); - align = 4; - } - if (align > this->zero_value_align_) - this->zero_value_align_ = align; - - return this->zero_value_; -} - -// Return whether V is the zero value variable. - -bool -Gogo::is_zero_value(Variable* v) const -{ - return this->zero_value_ != NULL && this->zero_value_->var_value() == v; -} - -// Return the backend variable for the special zero value, or NULL if -// it is not needed. - -Bvariable* -Gogo::backend_zero_value() -{ - if (this->zero_value_ == NULL) - return NULL; - - Type* byte_type = this->lookup_global("byte")->type_value(); - Btype* bbtype_type = byte_type->get_backend(this); - - Type* int_type = this->lookup_global("int")->type_value(); - - Expression* e = Expression::make_integer_int64(this->zero_value_size_, - int_type, - Linemap::unknown_location()); - Translate_context context(this, NULL, NULL, NULL); - Bexpression* blength = e->get_backend(&context); - - Btype* barray_type = this->backend()->array_type(bbtype_type, blength); - - std::string zname = this->zero_value_->name(); - Bvariable* zvar = - this->backend()->implicit_variable(zname, barray_type, false, - true, true, this->zero_value_align_); - this->backend()->implicit_variable_set_init(zvar, zname, barray_type, - false, true, true, NULL); - return zvar; -} - // Add statements to INIT_STMTS which run the initialization // functions for imported packages. This is only used for the "main" // package. @@ -6534,9 +6450,7 @@ Variable::get_backend_variable(Gogo* gogo, Named_object* function, Btype* btype = type->get_backend(gogo); Bvariable* bvar; - if (gogo->is_zero_value(this)) - bvar = gogo->backend_zero_value(); - else if (this->is_global_) + if (this->is_global_) bvar = backend->global_variable((package == NULL ? gogo->package_name() : package->package_name()), diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index 6333c83..0b1f8ef 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -653,20 +653,6 @@ class Gogo named_types_are_converted() const { return this->named_types_are_converted_; } - // Return the variable to use for the zero value of TYPE. All types - // shared the same zero value, and we make sure that it is large - // enough. - Named_object* - zero_value(Type *type); - - // Return whether a variable is the zero value variable. - bool - is_zero_value(Variable* v) const; - - // Create the zero value variable. - Bvariable* - backend_zero_value(); - // Write out the global values. void write_globals(); @@ -821,12 +807,6 @@ class Gogo std::string pkgpath_symbol_; // The prefix to use for symbols, from the -fgo-prefix option. std::string prefix_; - // The special zero value variable. - Named_object* zero_value_; - // The size of the zero value variable. - int64_t zero_value_size_; - // The alignment of the zero value variable, in bytes. - int64_t zero_value_align_; // Whether pkgpath_ has been set. bool pkgpath_set_; // Whether an explicit package path was set by -fgo-pkgpath. diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 5c8950a..b4620ff 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -1529,7 +1529,7 @@ Type::make_type_descriptor_type() // The type descriptor type. Struct_type* type_descriptor_type = - Type::make_builtin_struct_type(12, + Type::make_builtin_struct_type(11, "kind", uint8_type, "align", uint8_type, "fieldAlign", uint8_type, @@ -1541,8 +1541,7 @@ Type::make_type_descriptor_type() "string", pointer_string_type, "", pointer_uncommon_type, "ptrToThis", - pointer_type_descriptor_type, - "zero", unsafe_pointer_type); + pointer_type_descriptor_type); Named_type* named = Type::make_builtin_named_type("commonType", type_descriptor_type); @@ -2074,15 +2073,6 @@ Type::type_descriptor_constructor(Gogo* gogo, int runtime_type_kind, } ++p; - go_assert(p->is_field_name("zero")); - Expression* z = Expression::make_var_reference(gogo->zero_value(this), bloc); - z = Expression::make_unary(OPERATOR_AND, z, bloc); - Type* void_type = Type::make_void_type(); - Type* unsafe_pointer_type = Type::make_pointer_type(void_type); - z = Expression::make_cast(unsafe_pointer_type, z, bloc); - vals->push_back(z); - - ++p; go_assert(p == fields->end()); return Expression::make_struct_composite_literal(td_type, vals, bloc); |