Revert "reflect: handle zero-sized fields of directly-stored structures correctly"

This reverts commit b3388569a1 (CL 694195)

Reason for revert: still causing compiler failures on Google test code

Change-Id: I2a9b0f9a57fe2b6977238bbfbefb572545210b9f
Reviewed-on: https://go-review.googlesource.com/c/go/+/694995
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
This commit is contained in:
Keith Randall 2025-08-11 17:29:11 -07:00
parent ce3f3e2ae7
commit caf9fc3ccd
2 changed files with 0 additions and 30 deletions

View file

@ -1277,17 +1277,6 @@ func (v Value) Field(i int) Value {
fl |= flagStickyRO
}
}
if fl&flagIndir == 0 && typ.Size() == 0 {
// Special case for picking a field out of a direct struct.
// A direct struct must have a pointer field and possibly a
// bunch of zero-sized fields. We must return the zero-sized
// fields indirectly, as only ptr-shaped things can be direct.
// See issue 74935.
// We use nil instead of v.ptr as it doesn't matter and
// we can avoid pinning a possibly now-unused object.
return Value{typ, nil, fl | flagIndir}
}
// Either flagIndir is set and v.ptr points at struct,
// or flagIndir is not set and v.ptr is the actual struct data.
// In the former case, we want v.ptr + offset.

View file

@ -1,19 +0,0 @@
// run
// Copyright 2025 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 "reflect"
type W struct {
E struct{}
X *byte
}
func main() {
w := reflect.ValueOf(W{})
_ = w.Field(0).Interface()
}