compiler: Don't crash on invalid array type declarations.
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 26 Jan 2016 23:28:37 +0000 (23:28 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 26 Jan 2016 23:28:37 +0000 (23:28 +0000)
    Fixes golang/go#12937.

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

From-SVN: r232857

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/gogo.cc

index 9540d16..96a1e9f 100644 (file)
@@ -1,4 +1,4 @@
-731941c155214d6158fa800e52ab3225c0b55f73
+721c778adb8f99d8a6b7795dbad86013ccc9ba91
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 6708be9..5413cc9 100644 (file)
@@ -2699,6 +2699,15 @@ Gogo::lower_parse_tree()
 {
   Lower_parse_tree lower_parse_tree(this, NULL);
   this->traverse(&lower_parse_tree);
+
+  // There might be type definitions that involve expressions such as the
+  // array length.  Make sure to lower these expressions as well.  Otherwise,
+  // errors hidden within a type can introduce unexpected errors into later
+  // passes.
+  for (std::vector<Type*>::iterator p = this->verify_types_.begin();
+       p != this->verify_types_.end();
+       ++p)
+    Type::traverse(*p, &lower_parse_tree);
 }
 
 // Lower a block.