From: Ian Lance Taylor Date: Fri, 9 Dec 2011 05:04:12 +0000 (+0000) Subject: compiler: Another correction to hidden fields in composite literals. X-Git-Tag: releases/gcc-4.7.0~1671 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c573faf5e4f7fad97618dd9dda5120be6c157f3d;p=thirdparty%2Fgcc.git compiler: Another correction to hidden fields in composite literals. From-SVN: r182154 --- 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()) - { - 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()); } }