MMCT TEAM
Server IP : 2a02:4780:11:1359:0:1d43:a566:2  /  Your IP : 216.73.216.161
Web Server : LiteSpeed
System : Linux in-mum-web1259.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64
User : u490972518 ( 490972518)
PHP Version : 5.6.40
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF
Directory (0755) :  /home/../opt/golang/1.19.4/test/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/../opt/golang/1.19.4/test/nowritebarrier.go
// errorcheck -+

// Copyright 2016 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.

// Test go:nowritebarrier and related directives.

package p

type t struct {
	f *t
}

var x t
var y *t

//go:nowritebarrier
func a1() {
	x.f = y // ERROR "write barrier prohibited"
	a2()    // no error
}

//go:noinline
func a2() {
	x.f = y
}

//go:nowritebarrierrec
func b1() {
	b2()
}

//go:noinline
func b2() {
	x.f = y // ERROR "write barrier prohibited by caller"
}

// Test recursive cycles through nowritebarrierrec and yeswritebarrierrec.

//go:nowritebarrierrec
func c1() {
	c2()
}

//go:yeswritebarrierrec
func c2() {
	c3()
}

func c3() {
	x.f = y
	c4()
}

//go:nowritebarrierrec
func c4() {
	c2()
}

//go:nowritebarrierrec
func d1() {
	d2()
}

func d2() {
	d3()
}

//go:noinline
func d3() {
	x.f = y // ERROR "write barrier prohibited by caller"
	d4()
}

//go:yeswritebarrierrec
func d4() {
	d2()
}

//go:noinline
func systemstack(func()) {}

//go:nowritebarrierrec
func e1() {
	systemstack(e2)
	systemstack(func() {
		x.f = y // ERROR "write barrier prohibited by caller"
	})
}

func e2() {
	x.f = y // ERROR "write barrier prohibited by caller"
}

MMCT - 2023