// Copyright 2009 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. //go:build cgo package reflect_test import ( . "reflect" "runtime/cgo" "testing" "unsafe" ) type nih struct { _ cgo.Incomplete x int } var global_nih = nih{x: 7} func TestNotInHeapDeref(t *testing.T) { // See issue 48399. v := ValueOf((*nih)(nil)) v.Elem() shouldPanic("reflect: call of reflect.Value.Field on zero Value", func() { v.Elem().Field(0) }) v = ValueOf(&global_nih) if got := v.Elem().Field(1).Int(); got != 7 { t.Fatalf("got %d, want 7", got) } v = ValueOf((*nih)(unsafe.Pointer(new(int)))) shouldPanic("reflect: reflect.Value.Elem on an invalid notinheap pointer", func() { v.Elem() }) shouldPanic("reflect: reflect.Value.Pointer on an invalid notinheap pointer", func() { v.Pointer() }) shouldPanic("reflect: reflect.Value.UnsafePointer on an invalid notinheap pointer", func() { v.UnsafePointer() }) }