compiler: Make empty interface types for vars during parse time.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Jul 2015 19:57:22 +0000 (19:57 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
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

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

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

index f189ed8..a7b5246 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 970e6bd..113371c 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;