diff options
Diffstat (limited to 'gcc/go/gofrontend/expressions.cc')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index b0be483..32f0612 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -12640,6 +12640,16 @@ Composite_literal_expression::lower_struct(Gogo* gogo, Type* type) { const Struct_field* sf = st->field(fre->field_index()); name = sf->field_name(); + + // See below. FIXME. + if (!Gogo::is_hidden_name(name) + && name[0] >= 'a' + && name[0] <= 'z') + { + if (gogo->lookup_global(name.c_str()) != NULL) + name = gogo->pack_hidden_name(name, false); + } + char buf[20]; snprintf(buf, sizeof buf, "%u", fre->field_index()); size_t buflen = strlen(buf); @@ -12671,7 +12681,7 @@ Composite_literal_expression::lower_struct(Gogo* gogo, Type* type) // A predefined name won't be packed. If it starts with a // lower case letter we need to check for that case, because - // the field name will be packed. + // the field name will be packed. FIXME. if (!Gogo::is_hidden_name(name) && name[0] >= 'a' && name[0] <= 'z') @@ -13505,7 +13515,10 @@ Struct_field_offset_expression::do_dump_expression( Ast_dump_context* ast_dump_context) const { ast_dump_context->ostream() << "unsafe.Offsetof("; - ast_dump_context->ostream() << this->field_->field_name(); + ast_dump_context->dump_type(this->type_); + ast_dump_context->ostream() << '.'; + ast_dump_context->ostream() << + Gogo::message_name(this->field_->field_name()); ast_dump_context->ostream() << ")"; } |