aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-12-09 05:04:12 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-12-09 05:04:12 +0000
commitc573faf5e4f7fad97618dd9dda5120be6c157f3d (patch)
tree7ee786096ca0211b338bb10152e2b9dc7383700c /gcc
parent14f2a7e2b1a8c5c21603c095a848c895af5b7a10 (diff)
downloadgcc-c573faf5e4f7fad97618dd9dda5120be6c157f3d.zip
gcc-c573faf5e4f7fad97618dd9dda5120be6c157f3d.tar.gz
gcc-c573faf5e4f7fad97618dd9dda5120be6c157f3d.tar.bz2
compiler: Another correction to hidden fields in composite literals.
From-SVN: r182154
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/expressions.cc20
1 files changed, 12 insertions, 8 deletions
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());
}
}