From 47ab3d4a42e9ab51c465c4322d2ec233f6324e6b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 15:16:40 +0200 Subject: Adding upstream version 1.18.10. Signed-off-by: Daniel Baumann --- test/inline_literal.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 test/inline_literal.go (limited to 'test/inline_literal.go') diff --git a/test/inline_literal.go b/test/inline_literal.go new file mode 100644 index 0000000..53c6c05 --- /dev/null +++ b/test/inline_literal.go @@ -0,0 +1,50 @@ +// 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) + } + } +} -- cgit v1.2.3