// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // DO NOT EDIT (use 'go test -v -update-expected' instead.) // See cmd/compile/internal/inline/inlheur/testdata/props/README.txt // for more information on the format of this file. // package funcflags import "os" // funcflags.go T_simple 20 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":null,"ResultFlags":null} // // func T_simple() { panic("bad") } // funcflags.go T_nested 32 0 1 // Flags FuncPropNeverReturns // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":1,"ParamFlags":[32],"ResultFlags":null} // // func T_nested(x int) { if x < 10 { panic("bad") } else { panic("good") } } // funcflags.go T_block1 46 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":[0],"ResultFlags":null} // // func T_block1(x int) { panic("bad") if x < 10 { return } } // funcflags.go T_block2 60 0 1 // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":0,"ParamFlags":[32],"ResultFlags":null} // // func T_block2(x int) { if x < 10 { return } panic("bad") } // funcflags.go T_switches1 75 0 1 // Flags FuncPropNeverReturns // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":1,"ParamFlags":[32],"ResultFlags":null} // // func T_switches1(x int) { switch x { case 1: panic("one") case 2: panic("two") } panic("whatev") } // funcflags.go T_switches1a 92 0 1 // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":0,"ParamFlags":[32],"ResultFlags":null} // // func T_switches1a(x int) { switch x { case 2: panic("two") } } // funcflags.go T_switches2 106 0 1 // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":0,"ParamFlags":[32],"ResultFlags":null} // // func T_switches2(x int) { switch x { case 1: panic("one") case 2: panic("two") default: return } panic("whatev") } // funcflags.go T_switches3 123 0 1 // // {"Flags":0,"ParamFlags":[0],"ResultFlags":null} // // func T_switches3(x interface{}) { switch x.(type) { case bool: panic("one") case float32: panic("two") } } // funcflags.go T_switches4 138 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":[0],"ResultFlags":null} // // func T_switches4(x int) { switch x { case 1: x++ fallthrough case 2: panic("two") fallthrough default: panic("bad") } panic("whatev") } // funcflags.go T_recov 157 0 1 // // {"Flags":0,"ParamFlags":[0],"ResultFlags":null} // // func T_recov(x int) { if x := recover(); x != nil { panic(x) } } // funcflags.go T_forloops1 169 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":[0],"ResultFlags":null} // // func T_forloops1(x int) { for { panic("wokketa") } } // funcflags.go T_forloops2 180 0 1 // // {"Flags":0,"ParamFlags":[0],"ResultFlags":null} // // func T_forloops2(x int) { for { println("blah") if true { break } panic("warg") } } // funcflags.go T_forloops3 195 0 1 // // {"Flags":0,"ParamFlags":[0],"ResultFlags":null} // // func T_forloops3(x int) { for i := 0; i < 101; i++ { println("blah") if true { continue } panic("plark") } for i := range [10]int{} { println(i) panic("plark") } panic("whatev") } // funcflags.go T_hasgotos 215 0 1 // // {"Flags":0,"ParamFlags":[0,0],"ResultFlags":null} // // func T_hasgotos(x int, y int) { { xx := x panic("bad") lab1: goto lab2 lab2: if false { goto lab1 } else { goto lab4 } lab4: if xx < y { lab3: if false { goto lab3 } } println(9) } } // funcflags.go T_break_with_label 246 0 1 // ParamFlags // 0 ParamMayFeedIfOrSwitch // 1 ParamNoInfo // // {"Flags":0,"ParamFlags":[64,0],"ResultFlags":null} // // func T_break_with_label(x int, y int) { // presence of break with label should pessimize this func // (similar to goto). panic("bad") lab1: for { println("blah") if x < 0 { break lab1 } panic("hubba") } } // funcflags.go T_callsexit 268 0 1 // Flags FuncPropNeverReturns // ParamFlags // 0 ParamFeedsIfOrSwitch // // {"Flags":1,"ParamFlags":[32],"ResultFlags":null} // // func T_callsexit(x int) { if x < 0 { os.Exit(1) } os.Exit(2) } // funcflags.go T_exitinexpr 281 0 1 // // {"Flags":0,"ParamFlags":[0],"ResultFlags":null} // callsite: funcflags.go:286:18|0 flagstr "CallSiteOnPanicPath" flagval 2 score 102 mask 1 maskstr "panicPathAdj" // // func T_exitinexpr(x int) { // This function does indeed unconditionally call exit, since the // first thing it does is invoke exprcallsexit, however from the // perspective of this function, the call is not at the statement // level, so we'll wind up missing it. if exprcallsexit(x) < 0 { println("foo") } } // funcflags.go T_select_noreturn 297 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":[0,0,0],"ResultFlags":null} // // func T_select_noreturn(chi chan int, chf chan float32, p *int) { rv := 0 select { case i := <-chi: rv = i case f := <-chf: rv = int(f) } *p = rv panic("bad") } // funcflags.go T_select_mayreturn 314 0 1 // // {"Flags":0,"ParamFlags":[0,0,0],"ResultFlags":[0]} // // func T_select_mayreturn(chi chan int, chf chan float32, p *int) int { rv := 0 select { case i := <-chi: rv = i return i case f := <-chf: rv = int(f) } *p = rv panic("bad") } // funcflags.go T_calls_callsexit 334 0 1 // Flags FuncPropNeverReturns // // {"Flags":1,"ParamFlags":[0],"ResultFlags":null} // callsite: funcflags.go:335:15|0 flagstr "CallSiteOnPanicPath" flagval 2 score 102 mask 1 maskstr "panicPathAdj" // // func T_calls_callsexit(x int) { exprcallsexit(x) } func exprcallsexit(x int) int { os.Exit(x) return x }