This patch to the Go frontend fixes the test for whether a constant argument to the builtin function make is too large. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Will commit to 4.8 when the branch opens.
Ian
diff -r 5aa7a9d25a56 go/expressions.cc --- a/go/expressions.cc Wed Oct 09 20:27:42 2013 -0700 +++ b/go/expressions.cc Wed Oct 09 20:49:57 2013 -0700 @@ -7542,7 +7542,7 @@ switch (nc.to_unsigned_long(&v)) { case Numeric_constant::NC_UL_VALID: - return true; + break; case Numeric_constant::NC_UL_NOTINT: error_at(e->location(), "non-integer %s argument to make", is_length ? "len" : "cap"); @@ -7554,8 +7554,23 @@ case Numeric_constant::NC_UL_BIG: // We don't want to give a compile-time error for a 64-bit // value on a 32-bit target. - return true; - } + break; + } + + mpz_t val; + if (!nc.to_int(&val)) + go_unreachable(); + int bits = mpz_sizeinbase(val, 2); + mpz_clear(val); + Type* int_type = Type::lookup_integer_type("int"); + if (bits >= int_type->integer_type()->bits()) + { + error_at(e->location(), "%s argument too large for make", + is_length ? "len" : "cap"); + return false; + } + + return true; } if (e->type()->integer_type() != NULL)