compiler: follow-on fix for finalizing imported methods

This patch is a revision to CL 185518, which added code to perform
finalization of methods on types created by the importer and not
directly reachable until inlining is done.

The original fix invoked the finalization code at the end of
Import::read_types(), but it turns out this doesn't handle the case
where a type with methods is read in due to a reference from something
later in the export data (a function or variable). The fix is to move
the import finalization call to the end of Import::import().

Testcase for this bug is in CL 187057.

Fixes golang/go#33219.

Change-Id: I2ec83b4df8ec554b4bfbbd590eb1049c341a415a
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/187058
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/go/import.cc b/go/import.cc
index be71f04..64c1ef2 100644
--- a/go/import.cc
+++ b/go/import.cc
@@ -450,6 +450,14 @@
       this->require_c_string("\n");
     }
 
+  // Finalize methods for any imported types. This call is made late in the
+  // import process so as to A) avoid finalization of a type whose methods
+  // refer to types that are only partially read in, and B) capture both the
+  // types imported by read_types() directly, and those imported indirectly
+  // because they are referenced by an imported function or variable.
+  // See issues #33013 and #33219 for more on why this is needed.
+  this->finalize_methods();
+
   return this->package_;
 }
 
@@ -678,12 +686,6 @@
 	this->gogo_->add_named_type(nt);
     }
 
-  // Finalize methods for any imported types. This is done after most of
-  // read_types() is complete so as to avoid method finalization of a type
-  // whose methods refer to types that are only partially read in.
-  // See issue #33013 for more on why this is needed.
-  this->finalize_methods();
-
   return true;
 }