diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.h | 2 |
3 files changed, 5 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 323ce16f93e..564c5b72ad7 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -15559,7 +15559,7 @@ bool Numeric_constant::set_type(Type* type, bool issue_error, Location loc) { bool ret; - if (type == NULL) + if (type == NULL || type->is_error()) ret = true; else if (type->integer_type() != NULL) ret = this->check_int_type(type->integer_type(), issue_error, loc); diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index f9877fa3c1b..d3047575750 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -1966,6 +1966,8 @@ Type::type_descriptor_constructor(Gogo* gogo, int runtime_type_kind, if (!this->has_pointer()) runtime_type_kind |= RUNTIME_TYPE_KIND_NO_POINTERS; + if (this->points_to() != NULL) + runtime_type_kind |= RUNTIME_TYPE_KIND_DIRECT_IFACE; Struct_field_list::const_iterator p = fields->begin(); go_assert(p->is_field_name("kind")); vals->push_back(Expression::make_integer_ul(runtime_type_kind, p->type(), diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h index 4f000b12717..acc8af5df03 100644 --- a/gcc/go/gofrontend/types.h +++ b/gcc/go/gofrontend/types.h @@ -81,6 +81,8 @@ static const int RUNTIME_TYPE_KIND_STRING = 24; static const int RUNTIME_TYPE_KIND_STRUCT = 25; static const int RUNTIME_TYPE_KIND_UNSAFE_POINTER = 26; +static const int RUNTIME_TYPE_KIND_DIRECT_IFACE = (1 << 5); +static const int RUNTIME_TYPE_KIND_GC_PROG = (1 << 6); static const int RUNTIME_TYPE_KIND_NO_POINTERS = (1 << 7); // GC instruction opcodes. These must match the values in libgo/runtime/mgc0.h. |