• Keith Randall's avatar
    cmd/compile: don't use nilcheck information until the next block · 256a605f
    Keith Randall authored
    When nilcheck runs, the values in a block are not in any particular
    order.  So any facts derived from examining the blocks shouldn't be
    used until we reach the next block.
    
    This is suboptimal as it won't eliminate nil checks within a block.
    But it's probably a better fix for now as it is a much smaller change
    than other strategies for fixing this bug.
    
    nilptr3.go changes are mostly because for this pattern:
      _ = *p
      _ = *p
    either nil check is fine to keep, and this CL changes which one
    the compiler tends to keep.
    There are a few regressions from code like this:
      _ = *p
      f()
      _ = *p
    For this pattern, after this CL we issue 2 nil checks instead of one.
    (For the curious, this happens because intra-block nil check
     elimination now falls to CSE, not nilcheck proper.  The former
     pattern has two nil checks with the same store argument.  The latter
     pattern has two nil checks with different store arguments.)
    
    Fixes #18725
    
    Change-Id: I3721b494c8bc9ba1142dc5c4361ea55c66920ac8
    Reviewed-on: https://go-review.googlesource.com/35485Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    256a605f
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...