diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-12-09 05:04:12 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-12-09 05:04:12 +0000 |
commit | c573faf5e4f7fad97618dd9dda5120be6c157f3d (patch) | |
tree | 7ee786096ca0211b338bb10152e2b9dc7383700c /gcc | |
parent | 14f2a7e2b1a8c5c21603c095a848c895af5b7a10 (diff) | |
download | gcc-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.cc | 20 |
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()); } } |