<!-- Please answer these questions before submitting your issue. Thanks! For questions please use one of our forums: https://github.com/golang/go/wiki/Questions --> ### What version of Go are you using (`go version`)? <pre> $ go version go version go1.16.3 windows/amd64 </pre> ### Does this issue reproduce with the latest release? Yes ### What operating system and processor architecture are you using (`go env`)? <details><summary><code>go env</code> Output</summary><br><pre> $ go env set GO111MODULE=on set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\REDACTED\AppData\Local\go-build set GOENV=C:\Users\REDACTED\AppData\Roaming\go\env set GOEXE=.exe set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOINSECURE= set GOMODCACHE=C:\Users\REDACTED\go\pkg\mod set GONOPROXY=none set GONOSUMDB=gitscm.REDACTED.ca set GOOS=windows set GOPATH=C:\Users\REDACTED\go set GOPRIVATE=gitscm.REDACTED.ca set GOPROXY=direct set GOROOT=C:\Go set GOSUMDB=off set GOTMPDIR= set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=C:\Users\ro006714\go\src\gitscm.REDACTED.ca\REDACTED\gorm-issues\go.mod set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\REDACTED\AppData\Local\Temp\go-build049852886=/tmp/go-build -gno-record-gcc-switches </pre></details> ### What did you do? <!-- If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on play.golang.org is best. --> I'm using a C Library called GEOS which provides a C-backed implementation for handling Geometric operations. A struct containing this C type was used during some reflection operations, but upon upgrading to Go v1.15.4 (Or any version after, including latest) this results in a panic. I've isolated the problem, and it appears that when using a reflect `Type` to create a new reflect `Value`, a subsequent call of `Interface()` results in the panic: bad indir: ```go var test *C.GEOSGeometry reflectType := reflect.ValueOf(test).Type().Elem() value := reflect.New(reflectType) value.Interface() // Panics in 1.15.4+ ``` ### What did you expect to see? No code within the underlying C library nor the use of the reflection changed, only the output of `Interface()`. I'd have expected to see the value being returned the same as before the update. ### What did you see instead? `panic: bad indir` This is coming from `func packEface` inside `reflect/value.go` where the following occurs: ```go ... switch { case ifaceIndir(t): if v.flag&flagIndir == 0 { panic("bad indir") } ... ``` Note: Here `v.flag` resolves to 22 (`flagIndir` is 128)