On a 64bit Mac, this code: package main
var X [^uint(0)>>14]byte func main() { } produces a compile time error: main.X: symbol too large (1125899906842623 bytes > 2000000000 bytes) But this compiles and crashes at runtime. package main func main() { var X [^uint(0) >> 14]byte _ = X } runtime: out of memory: cannot allocate 1125899906842624-byte block (3997696 in use) fatal error: out of memory goroutine 1 [running]: runtime.throw({0x1061335, 0x11}) /usr/local/go/src/runtime/panic.go:1198 +0x71 fp=0xc000042658 sp=0xc000042628 pc=0x102b031 runtime.(*mcache).allocLarge(0x100a734, 0x3ffffffffffff, 0x11, 0x1) /usr/local/go/src/runtime/mcache.go:229 +0x22e fp=0xc0000426b8 sp=0xc000042658 pc=0x101086e runtime.mallocgc(0x3ffffffffffff, 0x1059300, 0x1) /usr/local/go/src/runtime/malloc.go:1082 +0x5c5 fp=0xc000042738 sp=0xc0000426b8 pc=0x100a645 runtime.newobject(0x1058a00) /usr/local/go/src/runtime/malloc.go:1228 +0x27 fp=0xc000042760 sp=0xc000042738 pc=0x100aa87 main.main() /Users/billmorgan/git/tmp/main.go:5 +0x25 fp=0xc000042780 sp=0xc000042760 pc=0x1054c65 runtime.main() /usr/local/go/src/runtime/proc.go:255 +0x227 fp=0xc0000427e0 sp=0xc000042780 pc=0x102d6c7 runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:1581 +0x1 fp=0xc0000427e8 sp=0xc0000427e0 pc=0x1051fa1 Why does the 2nd program succeed compilation of the same array that failed compilation in the 1st program? It was known ahead of time that the allocation would fail so I think the 2nd program should have failed to compile too. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/35f1d7f4-ca10-49f1-9f54-351f7d6034e0n%40googlegroups.com.