aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-10-29 18:14:50 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-10-29 18:14:50 +0000
commitf4a513a98e6341b2d4796752644a27c722612847 (patch)
tree571dc5d41bd31a1e7befb942446857d17016547b /gcc/go
parentbdb60a10ac876bd1d68ab7b0b0ff2acc69e0c214 (diff)
downloadgcc-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/go')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/gogo.cc88
-rw-r--r--gcc/go/gofrontend/gogo.h20
-rw-r--r--gcc/go/gofrontend/types.cc14
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);