OSDN Git Service

Improve error for undefined name in imported package.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Sep 2011 22:34:59 +0000 (22:34 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Sep 2011 22:34:59 +0000 (22:34 +0000)
Avoid emitting some followon errors.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@179020 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/parse.cc

index 43bcb5e..4e9d8d8 100644 (file)
@@ -9730,7 +9730,10 @@ Call_result_expression::do_type()
   if (fntype == NULL)
     {
       if (ce->issue_error())
-       this->report_error(_("expected function"));    
+       {
+         if (!ce->fn()->type()->is_error())
+           this->report_error(_("expected function"));
+       }
       this->set_is_error();
       return Type::make_error_type();
     }
@@ -10043,7 +10046,9 @@ Array_index_expression::do_check_types(Gogo*)
     this->report_error(_("index must be integer"));
   if (this->end_ != NULL
       && this->end_->type()->integer_type() == NULL
-      && !this->end_->is_nil_expression())
+      && !this->end_->type()->is_error()
+      && !this->end_->is_nil_expression()
+      && !this->end_->is_error_expression())
     this->report_error(_("slice end must be integer"));
 
   Array_type* array_type = this->array_->type()->array_type();
index 2b65139..bf084e0 100644 (file)
@@ -335,10 +335,17 @@ Parse::type_name(bool issue_error)
   bool ok = true;
   if (named_object == NULL)
     {
-      if (package != NULL)
-       ok = false;
-      else
+      if (package == NULL)
        named_object = this->gogo_->add_unknown_name(name, location);
+      else
+       {
+         const std::string& packname(package->package_value()->name());
+         error_at(location, "reference to undefined identifer %<%s.%s%>",
+                  Gogo::message_name(packname).c_str(),
+                  Gogo::message_name(name).c_str());
+         issue_error = false;
+         ok = false;
+       }
     }
   else if (named_object->is_type())
     {