compiler: Make empty interface types for vars during parse time.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 23 Jul 2015 19:57:22 +0000 (19:57 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 23 Jul 2015 19:57:22 +0000 (19:57 +0000)
    When making the type for a variable with an empty interface type,
    the parser makes an interface type with a NULL method set and relies
    on later passes to correct this.

    For sink variables, which are ignored in later passes, the interface
    method table is never finalized and a compile time assertion is issued.
    Instead, the initial type generated by the parser should be the empty
    interface type.

    Fixes golang/go#11579.

    Reviewed-on: https://go-review.googlesource.com/12049

From-SVN: r226123

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/parse.cc

index f189ed8ad92ed6b712c0696a71061730bfb009c7..a7b5246ad3962bb38360a8e788ff03f7fa6dae84 100644 (file)
@@ -1,4 +1,4 @@
-b4a932b4a51b612cadcec93a83f94d6ee7d7d190
+cbb27e8089e11094a20502e53ef69c9c36955f85
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 970e6bdd14a7c82279cd3ad833d44e3abba64629..113371c7b216b2a9ee0c04779c1d2ed90f6244f2 100644 (file)
@@ -1225,7 +1225,11 @@ Parse::interface_type(bool record)
       methods = NULL;
     }
 
-  Interface_type* ret = Type::make_interface_type(methods, location);
+  Interface_type* ret;
+  if (methods == NULL)
+    ret = Type::make_empty_interface_type(location);
+  else
+    ret = Type::make_interface_type(methods, location);
   if (record)
     this->gogo_->record_interface_type(ret);
   return ret;