// Copyright 2021 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 // The -fsanitize=address option of C compier can detect stack-use-after-return bugs. // In the following program, the local variable 'local' was moved to heap by the Go // compiler because foo() is returning the reference to 'local', and return stack of // foo() will be invalid. Thus for main() to use the reference to 'local', the 'local' // must be available even after foo() has finished. Therefore, Go has no such issue. import "fmt" var ptr *int func main() { foo() fmt.Printf("ptr=%x, %v", *ptr, ptr) } func foo() { var local int local = 1 ptr = &local // local is moved to heap. }