env GOPRIVATE=test/main garble build exec ./main ! stdout 'main.go|other_file_name|is sorted' [short] stop # no need to verify this with -short go build exec ./main stdout 'main.go' stdout 'other_file_name' stdout ':19: main' stdout 'initLines is sorted' stdout 'varLines is sorted' -- go.mod -- module test/main go 1.15 -- main.go -- package main import ( "fmt" "runtime" "sort" ) var _, globalFile, globalLine, _ = runtime.Caller(0) func init() { _, file, line, _ := runtime.Caller(0) fmt.Printf("%s:%d: init\n", file, line) } func main() { fmt.Printf("%s:%d: global\n", globalFile, globalLine) _, file, line, _ := runtime.Caller(0) fmt.Printf("%s:%d: main\n", file, line) funcDecl() funcVar() // initLines is filled by ten consecutive funcs. // If we are not shuffling or obfuscating line numbers, // this list will be sorted. // If we are, it's extremely unlikely it would remain sorted. if sort.IsSorted(sort.IntSlice(initLines)) { fmt.Println("initLines is sorted") } // Same as the above, but with vars. if sort.IsSorted(sort.IntSlice(varLines)) { fmt.Println("varLines is sorted") } } -- other_file_name.go -- package main import ( "fmt" "runtime" ) func funcDecl() { _, file, line, _ := runtime.Caller(0) fmt.Printf("%s:%d: func\n", file, line) } var funcVar = func() { _, file, line, _ := runtime.Caller(0) fmt.Printf("%s:%d: func var\n", file, line) } var initLines []int func curLine() int { _, _, line, _ := runtime.Caller(1) return line } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } func init() { initLines = append(initLines, curLine()) } var varLine0 = curLine() var varLine1 = curLine() var varLine2 = curLine() var varLine3 = curLine() var varLine4 = curLine() var varLine5 = curLine() var varLine6 = curLine() var varLine7 = curLine() var varLine8 = curLine() var varLine9 = curLine() var varLines = []int{ varLine0, varLine1, varLine2, varLine3, varLine4, varLine5, varLine6, varLine7, varLine8, varLine9, }