1
0
mirror of https://github.com/golang/go synced 2024-11-06 21:36:11 -07:00
go/misc/cgo/testsanitizers/testdata/asan_unsafe_fail2.go
fanzha02 c379c3d58d cmd/compile: set conversions to unsafe.Pointer as an escaping operation when -asan is enabled
When ASan is enabled, treat conversions to unsafe.Pointer as
an escaping operation. In this way, all pointer operations on
the stack objects will become operations on the escaped heap
objects. As we've already supported ASan detection of error
memory accesses to heap objects. With this trick, we can use
-asan option to report errors on bad stack operations.

Add test cases.

Updates #44853.

Change-Id: I6281e77f6ba581d7008d610f0b24316078b6e746
Reviewed-on: https://go-review.googlesource.com/c/go/+/393315
Trust: Fannie Zhang <Fannie.Zhang@arm.com>
Run-TryBot: Fannie Zhang <Fannie.Zhang@arm.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Eric Fang <eric.fang@arm.com>
2022-03-17 08:43:51 +00:00

29 lines
550 B
Go

// Copyright 2022 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 (
"fmt"
"unsafe"
)
func main() {
a := 1
b := 2
c := add(a, b)
d := a + b
fmt.Println(c, d)
}
//go:noinline
func add(a1, b1 int) (ret int) {
// The return value
// When -asan is enabled, the unsafe.Pointer(&ret) conversion is escaping.
var p *int = (*int)(unsafe.Add(unsafe.Pointer(&ret), 1*unsafe.Sizeof(int(1))))
*p = 123 // BOOM
ret = a1 + b1
return
}