On Wednesday, September 6, 2017 at 6:40:46 AM UTC-4, Jakob Borg wrote: > > On 6 Sep 2017, at 10:28, T L <tapi...@gmail.com <javascript:>> wrote: > > It is just weird that the evaluation timing of *p is different to other > expressions, such as, *p+0, *p*1, func()int{return *p}m etc. > > The value depends on a data race so it's entirely undefined in all cases. > That the actual outcome then depends on trivial differences that may affect > CPU loads/stores, instruction ordering, register usage, etc isn't > surprising. > > //jb
Just check the Go runtime code, the signature of the channel send function is func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool { where ep is a pointer to the sent value. Apparently, if the sent value is expression of a pure pointer dereference, the pointer will be passed as the ep argument, For other cases, the sent expression will get evaluated firstly and store the result in a temp value, then pass the address of temp value as the ep argument. -- 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. For more options, visit https://groups.google.com/d/optout.