...
Run Format

Source file test/inline_literal.go

Documentation: test

  // run
  
  // Copyright 2017 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.
  
  package main
  
  import (
  	"log"
  	"reflect"
  	"runtime"
  )
  
  func hello() string {
  	return "Hello World" // line 16
  }
  
  func foo() string { // line 19
  	x := hello() // line 20
  	y := hello() // line 21
  	return x + y // line 22
  }
  
  func bar() string {
  	x := hello() // line 26
  	return x
  }
  
  // funcPC returns the PC for the func value f.
  func funcPC(f interface{}) uintptr {
  	return reflect.ValueOf(f).Pointer()
  }
  
  // Test for issue #15453. Previously, line 26 would appear in foo().
  func main() {
  	pc := funcPC(foo)
  	f := runtime.FuncForPC(pc)
  	for ; runtime.FuncForPC(pc) == f; pc++ {
  		file, line := f.FileLine(pc)
  		if line == 0 {
  			continue
  		}
  		// Line 16 can appear inside foo() because PC-line table has
  		// innermost line numbers after inlining.
  		if line != 16 && !(line >= 19 && line <= 22) {
  			log.Fatalf("unexpected line at PC=%d: %s:%d\n", pc, file, line)
  		}
  	}
  }
  

View as plain text