mirror of
https://github.com/golang/go
synced 2024-11-19 22:04:44 -07:00
cmd/compile: always nil check before interface call
Fixes #22703 The fix was already done by Cherry for defer/go of an interface call (CL 23820). We just need to do it everywhere. Change-Id: I0115d22e443931fe1bcce44c93c4d0770b5fd268 Reviewed-on: https://go-review.googlesource.com/77450 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
50ec831749
commit
fa1f52c5f6
@ -1221,6 +1221,537 @@ var linuxAMD64Tests = []*asmTest{
|
||||
`,
|
||||
neg: []string{"memmove"},
|
||||
},
|
||||
// Nil checks before calling interface methods
|
||||
{
|
||||
fn: `
|
||||
type I interface {
|
||||
foo000()
|
||||
foo001()
|
||||
foo002()
|
||||
foo003()
|
||||
foo004()
|
||||
foo005()
|
||||
foo006()
|
||||
foo007()
|
||||
foo008()
|
||||
foo009()
|
||||
foo010()
|
||||
foo011()
|
||||
foo012()
|
||||
foo013()
|
||||
foo014()
|
||||
foo015()
|
||||
foo016()
|
||||
foo017()
|
||||
foo018()
|
||||
foo019()
|
||||
foo020()
|
||||
foo021()
|
||||
foo022()
|
||||
foo023()
|
||||
foo024()
|
||||
foo025()
|
||||
foo026()
|
||||
foo027()
|
||||
foo028()
|
||||
foo029()
|
||||
foo030()
|
||||
foo031()
|
||||
foo032()
|
||||
foo033()
|
||||
foo034()
|
||||
foo035()
|
||||
foo036()
|
||||
foo037()
|
||||
foo038()
|
||||
foo039()
|
||||
foo040()
|
||||
foo041()
|
||||
foo042()
|
||||
foo043()
|
||||
foo044()
|
||||
foo045()
|
||||
foo046()
|
||||
foo047()
|
||||
foo048()
|
||||
foo049()
|
||||
foo050()
|
||||
foo051()
|
||||
foo052()
|
||||
foo053()
|
||||
foo054()
|
||||
foo055()
|
||||
foo056()
|
||||
foo057()
|
||||
foo058()
|
||||
foo059()
|
||||
foo060()
|
||||
foo061()
|
||||
foo062()
|
||||
foo063()
|
||||
foo064()
|
||||
foo065()
|
||||
foo066()
|
||||
foo067()
|
||||
foo068()
|
||||
foo069()
|
||||
foo070()
|
||||
foo071()
|
||||
foo072()
|
||||
foo073()
|
||||
foo074()
|
||||
foo075()
|
||||
foo076()
|
||||
foo077()
|
||||
foo078()
|
||||
foo079()
|
||||
foo080()
|
||||
foo081()
|
||||
foo082()
|
||||
foo083()
|
||||
foo084()
|
||||
foo085()
|
||||
foo086()
|
||||
foo087()
|
||||
foo088()
|
||||
foo089()
|
||||
foo090()
|
||||
foo091()
|
||||
foo092()
|
||||
foo093()
|
||||
foo094()
|
||||
foo095()
|
||||
foo096()
|
||||
foo097()
|
||||
foo098()
|
||||
foo099()
|
||||
foo100()
|
||||
foo101()
|
||||
foo102()
|
||||
foo103()
|
||||
foo104()
|
||||
foo105()
|
||||
foo106()
|
||||
foo107()
|
||||
foo108()
|
||||
foo109()
|
||||
foo110()
|
||||
foo111()
|
||||
foo112()
|
||||
foo113()
|
||||
foo114()
|
||||
foo115()
|
||||
foo116()
|
||||
foo117()
|
||||
foo118()
|
||||
foo119()
|
||||
foo120()
|
||||
foo121()
|
||||
foo122()
|
||||
foo123()
|
||||
foo124()
|
||||
foo125()
|
||||
foo126()
|
||||
foo127()
|
||||
foo128()
|
||||
foo129()
|
||||
foo130()
|
||||
foo131()
|
||||
foo132()
|
||||
foo133()
|
||||
foo134()
|
||||
foo135()
|
||||
foo136()
|
||||
foo137()
|
||||
foo138()
|
||||
foo139()
|
||||
foo140()
|
||||
foo141()
|
||||
foo142()
|
||||
foo143()
|
||||
foo144()
|
||||
foo145()
|
||||
foo146()
|
||||
foo147()
|
||||
foo148()
|
||||
foo149()
|
||||
foo150()
|
||||
foo151()
|
||||
foo152()
|
||||
foo153()
|
||||
foo154()
|
||||
foo155()
|
||||
foo156()
|
||||
foo157()
|
||||
foo158()
|
||||
foo159()
|
||||
foo160()
|
||||
foo161()
|
||||
foo162()
|
||||
foo163()
|
||||
foo164()
|
||||
foo165()
|
||||
foo166()
|
||||
foo167()
|
||||
foo168()
|
||||
foo169()
|
||||
foo170()
|
||||
foo171()
|
||||
foo172()
|
||||
foo173()
|
||||
foo174()
|
||||
foo175()
|
||||
foo176()
|
||||
foo177()
|
||||
foo178()
|
||||
foo179()
|
||||
foo180()
|
||||
foo181()
|
||||
foo182()
|
||||
foo183()
|
||||
foo184()
|
||||
foo185()
|
||||
foo186()
|
||||
foo187()
|
||||
foo188()
|
||||
foo189()
|
||||
foo190()
|
||||
foo191()
|
||||
foo192()
|
||||
foo193()
|
||||
foo194()
|
||||
foo195()
|
||||
foo196()
|
||||
foo197()
|
||||
foo198()
|
||||
foo199()
|
||||
foo200()
|
||||
foo201()
|
||||
foo202()
|
||||
foo203()
|
||||
foo204()
|
||||
foo205()
|
||||
foo206()
|
||||
foo207()
|
||||
foo208()
|
||||
foo209()
|
||||
foo210()
|
||||
foo211()
|
||||
foo212()
|
||||
foo213()
|
||||
foo214()
|
||||
foo215()
|
||||
foo216()
|
||||
foo217()
|
||||
foo218()
|
||||
foo219()
|
||||
foo220()
|
||||
foo221()
|
||||
foo222()
|
||||
foo223()
|
||||
foo224()
|
||||
foo225()
|
||||
foo226()
|
||||
foo227()
|
||||
foo228()
|
||||
foo229()
|
||||
foo230()
|
||||
foo231()
|
||||
foo232()
|
||||
foo233()
|
||||
foo234()
|
||||
foo235()
|
||||
foo236()
|
||||
foo237()
|
||||
foo238()
|
||||
foo239()
|
||||
foo240()
|
||||
foo241()
|
||||
foo242()
|
||||
foo243()
|
||||
foo244()
|
||||
foo245()
|
||||
foo246()
|
||||
foo247()
|
||||
foo248()
|
||||
foo249()
|
||||
foo250()
|
||||
foo251()
|
||||
foo252()
|
||||
foo253()
|
||||
foo254()
|
||||
foo255()
|
||||
foo256()
|
||||
foo257()
|
||||
foo258()
|
||||
foo259()
|
||||
foo260()
|
||||
foo261()
|
||||
foo262()
|
||||
foo263()
|
||||
foo264()
|
||||
foo265()
|
||||
foo266()
|
||||
foo267()
|
||||
foo268()
|
||||
foo269()
|
||||
foo270()
|
||||
foo271()
|
||||
foo272()
|
||||
foo273()
|
||||
foo274()
|
||||
foo275()
|
||||
foo276()
|
||||
foo277()
|
||||
foo278()
|
||||
foo279()
|
||||
foo280()
|
||||
foo281()
|
||||
foo282()
|
||||
foo283()
|
||||
foo284()
|
||||
foo285()
|
||||
foo286()
|
||||
foo287()
|
||||
foo288()
|
||||
foo289()
|
||||
foo290()
|
||||
foo291()
|
||||
foo292()
|
||||
foo293()
|
||||
foo294()
|
||||
foo295()
|
||||
foo296()
|
||||
foo297()
|
||||
foo298()
|
||||
foo299()
|
||||
foo300()
|
||||
foo301()
|
||||
foo302()
|
||||
foo303()
|
||||
foo304()
|
||||
foo305()
|
||||
foo306()
|
||||
foo307()
|
||||
foo308()
|
||||
foo309()
|
||||
foo310()
|
||||
foo311()
|
||||
foo312()
|
||||
foo313()
|
||||
foo314()
|
||||
foo315()
|
||||
foo316()
|
||||
foo317()
|
||||
foo318()
|
||||
foo319()
|
||||
foo320()
|
||||
foo321()
|
||||
foo322()
|
||||
foo323()
|
||||
foo324()
|
||||
foo325()
|
||||
foo326()
|
||||
foo327()
|
||||
foo328()
|
||||
foo329()
|
||||
foo330()
|
||||
foo331()
|
||||
foo332()
|
||||
foo333()
|
||||
foo334()
|
||||
foo335()
|
||||
foo336()
|
||||
foo337()
|
||||
foo338()
|
||||
foo339()
|
||||
foo340()
|
||||
foo341()
|
||||
foo342()
|
||||
foo343()
|
||||
foo344()
|
||||
foo345()
|
||||
foo346()
|
||||
foo347()
|
||||
foo348()
|
||||
foo349()
|
||||
foo350()
|
||||
foo351()
|
||||
foo352()
|
||||
foo353()
|
||||
foo354()
|
||||
foo355()
|
||||
foo356()
|
||||
foo357()
|
||||
foo358()
|
||||
foo359()
|
||||
foo360()
|
||||
foo361()
|
||||
foo362()
|
||||
foo363()
|
||||
foo364()
|
||||
foo365()
|
||||
foo366()
|
||||
foo367()
|
||||
foo368()
|
||||
foo369()
|
||||
foo370()
|
||||
foo371()
|
||||
foo372()
|
||||
foo373()
|
||||
foo374()
|
||||
foo375()
|
||||
foo376()
|
||||
foo377()
|
||||
foo378()
|
||||
foo379()
|
||||
foo380()
|
||||
foo381()
|
||||
foo382()
|
||||
foo383()
|
||||
foo384()
|
||||
foo385()
|
||||
foo386()
|
||||
foo387()
|
||||
foo388()
|
||||
foo389()
|
||||
foo390()
|
||||
foo391()
|
||||
foo392()
|
||||
foo393()
|
||||
foo394()
|
||||
foo395()
|
||||
foo396()
|
||||
foo397()
|
||||
foo398()
|
||||
foo399()
|
||||
foo400()
|
||||
foo401()
|
||||
foo402()
|
||||
foo403()
|
||||
foo404()
|
||||
foo405()
|
||||
foo406()
|
||||
foo407()
|
||||
foo408()
|
||||
foo409()
|
||||
foo410()
|
||||
foo411()
|
||||
foo412()
|
||||
foo413()
|
||||
foo414()
|
||||
foo415()
|
||||
foo416()
|
||||
foo417()
|
||||
foo418()
|
||||
foo419()
|
||||
foo420()
|
||||
foo421()
|
||||
foo422()
|
||||
foo423()
|
||||
foo424()
|
||||
foo425()
|
||||
foo426()
|
||||
foo427()
|
||||
foo428()
|
||||
foo429()
|
||||
foo430()
|
||||
foo431()
|
||||
foo432()
|
||||
foo433()
|
||||
foo434()
|
||||
foo435()
|
||||
foo436()
|
||||
foo437()
|
||||
foo438()
|
||||
foo439()
|
||||
foo440()
|
||||
foo441()
|
||||
foo442()
|
||||
foo443()
|
||||
foo444()
|
||||
foo445()
|
||||
foo446()
|
||||
foo447()
|
||||
foo448()
|
||||
foo449()
|
||||
foo450()
|
||||
foo451()
|
||||
foo452()
|
||||
foo453()
|
||||
foo454()
|
||||
foo455()
|
||||
foo456()
|
||||
foo457()
|
||||
foo458()
|
||||
foo459()
|
||||
foo460()
|
||||
foo461()
|
||||
foo462()
|
||||
foo463()
|
||||
foo464()
|
||||
foo465()
|
||||
foo466()
|
||||
foo467()
|
||||
foo468()
|
||||
foo469()
|
||||
foo470()
|
||||
foo471()
|
||||
foo472()
|
||||
foo473()
|
||||
foo474()
|
||||
foo475()
|
||||
foo476()
|
||||
foo477()
|
||||
foo478()
|
||||
foo479()
|
||||
foo480()
|
||||
foo481()
|
||||
foo482()
|
||||
foo483()
|
||||
foo484()
|
||||
foo485()
|
||||
foo486()
|
||||
foo487()
|
||||
foo488()
|
||||
foo489()
|
||||
foo490()
|
||||
foo491()
|
||||
foo492()
|
||||
foo493()
|
||||
foo494()
|
||||
foo495()
|
||||
foo496()
|
||||
foo497()
|
||||
foo498()
|
||||
foo499()
|
||||
foo500()
|
||||
foo501()
|
||||
foo502()
|
||||
foo503()
|
||||
foo504()
|
||||
foo505()
|
||||
foo506()
|
||||
foo507()
|
||||
foo508()
|
||||
foo509()
|
||||
foo510()
|
||||
foo511()
|
||||
}
|
||||
func $(i I) {
|
||||
i.foo511()
|
||||
}
|
||||
`,
|
||||
pos: []string{"TESTB"},
|
||||
},
|
||||
{
|
||||
fn: `
|
||||
func $(i I) {
|
||||
i.foo001()
|
||||
}
|
||||
`,
|
||||
neg: []string{"TESTB"},
|
||||
},
|
||||
}
|
||||
|
||||
var linux386Tests = []*asmTest{
|
||||
|
@ -3258,9 +3258,7 @@ func (s *state) call(n *Node, k callKind) *ssa.Value {
|
||||
}
|
||||
i := s.expr(fn.Left)
|
||||
itab := s.newValue1(ssa.OpITab, types.Types[TUINTPTR], i)
|
||||
if k != callNormal {
|
||||
s.nilCheck(itab)
|
||||
}
|
||||
s.nilCheck(itab)
|
||||
itabidx := fn.Xoffset + 2*int64(Widthptr) + 8 // offset of fun field in runtime.itab
|
||||
itab = s.newValue1I(ssa.OpOffPtr, s.f.Config.Types.UintptrPtr, itabidx, itab)
|
||||
if k == callNormal {
|
||||
|
Loading…
Reference in New Issue
Block a user