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

// +build !race

// Dummy race detection API, used when not built with -race.

package runtime

import (
	"unsafe"
)

const raceenabled = false

// Because raceenabled is false, none of these functions should be called.

func raceReadObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr)  { throw("race") }
func raceWriteObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr) { throw("race") }
func raceinit() uintptr                                                     { throw("race"); return 0 }
func racefini()                                                             { throw("race") }
func racemapshadow(addr unsafe.Pointer, size uintptr)                       { throw("race") }
func racewritepc(addr unsafe.Pointer, callerpc, pc uintptr)                 { throw("race") }
func racereadpc(addr unsafe.Pointer, callerpc, pc uintptr)                  { throw("race") }
func racereadrangepc(addr unsafe.Pointer, sz, callerpc, pc uintptr)         { throw("race") }
func racewriterangepc(addr unsafe.Pointer, sz, callerpc, pc uintptr)        { throw("race") }
func raceacquire(addr unsafe.Pointer)                                       { throw("race") }
func raceacquireg(gp *g, addr unsafe.Pointer)                               { throw("race") }
func racerelease(addr unsafe.Pointer)                                       { throw("race") }
func racereleaseg(gp *g, addr unsafe.Pointer)                               { throw("race") }
func racereleasemerge(addr unsafe.Pointer)                                  { throw("race") }
func racereleasemergeg(gp *g, addr unsafe.Pointer)                          { throw("race") }
func racefingo()                                                            { throw("race") }
func racemalloc(p unsafe.Pointer, sz uintptr)                               { throw("race") }
func racegostart(pc uintptr) uintptr                                        { throw("race"); return 0 }
func racegoend()                                                            { throw("race") }
