From c573faf5e4f7fad97618dd9dda5120be6c157f3d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 9 Dec 2011 05:04:12 +0000 Subject: [PATCH] compiler: Another correction to hidden fields in composite literals. From-SVN: r182154 --- gcc/go/gofrontend/expressions.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index e42d1787b44c..18858d519a08 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -12818,16 +12818,20 @@ Composite_literal_expression::lower_struct(Gogo* gogo, Type* type) Struct_type* st = type->struct_type(); if (this->vals_ == NULL || !this->has_keys_) { - if (this->vals_ != NULL && !this->vals_->empty()) + if (this->vals_ != NULL + && !this->vals_->empty() + && type->named_type() != NULL + && type->named_type()->named_object()->package() != NULL) { - std::string reason; - if (type->has_hidden_fields(NULL, &reason)) + for (Struct_field_list::const_iterator pf = st->fields()->begin(); + pf != st->fields()->end(); + ++pf) { - if (reason.empty()) + if (Gogo::is_hidden_name(pf->field_name())) error_at(this->location(), - "implicit assignment of hidden field"); - else - error_at(this->location(), "%s", reason.c_str()); + "assignment of unexported field %qs in %qs literal", + Gogo::message_name(pf->field_name()).c_str(), + type->named_type()->message_name().c_str()); } }