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.

Reply via email to