]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
compiler: Another correction to hidden fields in composite literals.
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 9 Dec 2011 05:04:12 +0000 (05:04 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 9 Dec 2011 05:04:12 +0000 (05:04 +0000)
From-SVN: r182154

gcc/go/gofrontend/expressions.cc

index e42d1787b44c834589e0f07c165437e80217ea7a..18858d519a08ee0b112a8ffdd92b425bfff0f001 100644 (file)
@@ -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());
            }
        }