I'm seeing the following panic on both Go 1.20.7 and Go 1.21.0 (amd64): panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x46e421] goroutine 368 [running]: type:.hash.redacted.com/redacted/redacted.componentKey(0xc001b37de8, 0xc001b37d68?) <autogenerated>:1 +0x2c redacted.com/redacted/redacted.(*redactedType[...]).redactedMethod1(0x1481900, 0xc0046c6a20) redacted/redacted.go:182 +0x2c5 redacted.com/redacted/redacted.(*redactedType[...]).redactedMethod2(0x1481900) redacted/redacted.go:141 +0x5c created by redacted.com/redacted.NewRedactedType[...] in goroutine 1 redacted/redacted.go:99 +0x165
componentKey is: type componentKey struct { a string b string } Line 182 is: myMap[myComponentKey] += 1 where myMap is of type map[componentKey]int64, and myComponentKey is of type componentKey. As I understand it: 1. The issue is not that myMap is nil; if that were the case, the panic would read `assignment to entry in nil map` 2. The nil dereference is coming from the hash function that the compiler autogenerated for componentKey, which looks something like this (Go 1.21): TEXT type:.hash.main.componentKey(SB) <autogenerated> <autogenerated>:1 0x457780 493b6610 CMPQ SP, 0x10(R14) <autogenerated>:1 0x457784 762c JBE 0x4577b2 <autogenerated>:1 0x457786 55 PUSHQ BP <autogenerated>:1 0x457787 4889e5 MOVQ SP, BP <autogenerated>:1 0x45778a 4883ec10 SUBQ $0x10, SP <autogenerated>:1 0x45778e 4889442420 MOVQ AX, 0x20(SP) <autogenerated>:1 0x457793 e808d0ffff CALL runtime.strhash(SB) <autogenerated>:1 0x457798 488b4c2420 MOVQ 0x20(SP), CX <autogenerated>:1 0x45779d 4883c110 ADDQ $0x10, CX <autogenerated>:1 0x4577a1 4889c3 MOVQ AX, BX <autogenerated>:1 0x4577a4 4889c8 MOVQ CX, AX <autogenerated>:1 0x4577a7 e8f4cfffff CALL runtime.strhash(SB) <autogenerated>:1 0x4577ac 4883c410 ADDQ $0x10, SP <autogenerated>:1 0x4577b0 5d POPQ BP <autogenerated>:1 0x4577b1 c3 RET <autogenerated>:1 0x4577b2 4889442408 MOVQ AX, 0x8(SP) <autogenerated>:1 0x4577b7 48895c2410 MOVQ BX, 0x10(SP) <autogenerated>:1 0x4577bc 0f1f4000 NOPL 0(AX) <autogenerated>:1 0x4577c0 e8fbcdffff CALL runtime.morestack_noctxt.abi0(SB) <autogenerated>:1 0x4577c5 488b442408 MOVQ 0x8(SP), AX <autogenerated>:1 0x4577ca 488b5c2410 MOVQ 0x10(SP), BX <autogenerated>:1 0x4577cf ebaf JMP type:.hash.main.componentKey(SB) I'm having difficulty understanding how this code could produce a nil dereference, unless some runtime assumptions are being violated (maybe the string pointer and length are out of sync due to a data race)? Thanks very much for your time. -- 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/4263d5f7-abb5-4eb3-ae11-bdf9e42bbf56n%40googlegroups.com.