From d18734b5adea54ddd004e51b8d2593752133596c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 3 May 2018 17:20:44 +0000 Subject: compiler: avoid crashing on invalid non-integer array length 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 | 2 +- gcc/go/gofrontend/types.cc | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index bb1f4eb..614333d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 11924e6..e5f84c5 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -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)) { -- cgit v1.1