| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Test interpretation on 32 bit widths. |
| |
| package main |
| |
| func main() { |
| mapSize() |
| } |
| |
| func mapSize() { |
| // Tests for the size argument of make on a map type. |
| const tooBigFor32 = 1<<33 - 1 |
| wantPanic( |
| func() { |
| _ = make(map[int]int, int64(tooBigFor32)) |
| }, |
| "runtime error: ssa.MakeMap.Reserve value 8589934591 does not fit in int", |
| ) |
| |
| // TODO: Enable the following if sizeof(int) can be different for host and target. |
| // _ = make(map[int]int, tooBigFor32) |
| // |
| // Second arg to make in `make(map[int]int, tooBigFor32)` is an untyped int and |
| // is converted into an int explicitly in ssa. |
| // This has a different value on 32 and 64 bit systems. |
| } |
| |
| func wantPanic(fn func(), s string) { |
| defer func() { |
| err := recover() |
| if err == nil { |
| panic("expected panic") |
| } |
| if got := err.(error).Error(); got != s { |
| panic("expected panic " + s + " got " + got) |
| } |
| }() |
| fn() |
| } |