compiler: avoid crashing on invalid non-integer array length
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 3 May 2018 17:20:44 +0000 (17:20 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 3 May 2018 17:20:44 +0000 (17:20 +0000)
    Tweak the array type checking code to avoid crashing on array types
    whose length expressions are explicit non-integer types (for example,
    "float64(10)"). If such constructs are seen, issue an "invalid array
    bound" error.

    Fixes golang/go#13486.

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

From-SVN: r259900

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/types.cc

index bb1f4eb3508d23c6cbcbc880115236ecbf098b44..614333d96d73ab45b2e45a5a90a71f100612873e 100644 (file)
@@ -1,4 +1,4 @@
-e367bffce3d2c49b456fdf41ab097bded2bcbc3b
+85ca682349af2cb1aa6b1eecac794aeb73d24f15
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 11924e6e224f027ecee12be8372cd6c23ae4345a..e5f84c51549c0ebd960fd6dd6aa0aa7a853abb4c 100644 (file)
@@ -7016,6 +7016,16 @@ Array_type::verify_length()
       return false;
     }
 
+  // For array types, the length expression can be an untyped constant
+  // representable as an int, but we don't allow explicitly non-integer
+  // values such as "float64(10)". See issues #13485 and #13486.
+  if (this->length_->type()->integer_type() == NULL
+      && !this->length_->type()->is_error_type())
+    {
+      go_error_at(this->length_->location(), "invalid array bound");
+      return false;
+    }
+
   Numeric_constant nc;
   if (!this->length_->numeric_constant_value(&nc))
     {