runtime: include inlined calls in result of CallersFrames

Change-Id: If1a3396175f2afa607d56efd1444181334a9ae3e
Reviewed-on: https://go-review.googlesource.com/37862
Reviewed-by: Austin Clements <austin@google.com>
diff --git a/test/inline_callers.go b/test/inline_callers.go
index c387362..fb6ff6c 100644
--- a/test/inline_callers.go
+++ b/test/inline_callers.go
@@ -40,6 +40,21 @@
 	return
 }
 
+func testCallersFrames(skp int) (frames []string) {
+	skip = skp
+	f()
+	callers := pcs[:npcs]
+	ci := runtime.CallersFrames(callers)
+	for {
+		frame, more := ci.Next()
+		frames = append(frames, frame.Function)
+		if !more || frame.Function == "main.main" {
+			break
+		}
+	}
+	return
+}
+
 var expectedFrames [][]string = [][]string{
 	0: {"runtime.Callers", "main.testCallers", "main.main"},
 	1: {"main.testCallers", "main.main"},
@@ -49,6 +64,8 @@
 	5: {"main.main"},
 }
 
+var allFrames = []string{"runtime.Callers", "main.h", "main.g", "main.f", "main.testCallersFrames", "main.main"}
+
 func same(xs, ys []string) bool {
 	if len(xs) != len(ys) {
 		return false
@@ -68,5 +85,11 @@
 		if !same(frames, expected) {
 			log.Fatalf("testCallers(%d):\n got %v\n want %v", i, frames, expected)
 		}
+
+		frames = testCallersFrames(i)
+		expected = allFrames[i:]
+		if !same(frames, expected) {
+			log.Fatalf("testCallersFrames(%d):\n got %v\n want %v", i, frames, expected)
+		}
 	}
 }