From: ian Date: Fri, 9 Dec 2011 05:04:12 +0000 (+0000) Subject: compiler: Another correction to hidden fields in composite literals. X-Git-Tag: upstream/4.9.2~15640 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e6013c28be3801b34d7a1b6f95b42f2544375b28;p=platform%2Fupstream%2Flinaro-gcc.git compiler: Another correction to hidden fields in composite literals. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182154 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index e42d178..18858d5 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()) - { - std::string reason; - if (type->has_hidden_fields(NULL, &reason)) + if (this->vals_ != NULL + && !this->vals_->empty() + && type->named_type() != NULL + && type->named_type()->named_object()->package() != NULL) + { + 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()); } }