From a362ba024fcc7d827e46e395ed761cb5c5b2c7a9 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 29 Dec 2025 11:31:22 +0800 Subject: [PATCH 1/2] reflect: fix Type.Name() returning empty string for basic types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Basic types (int, string, bool, etc.) don't have TFlagNamed set in llgo, but they do have valid names stored in Str_ field. This fix adds a special case in Name() to return String() for basic types (Kind <= UnsafePointer). Fixes #1412 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- runtime/internal/lib/reflect/type.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime/internal/lib/reflect/type.go b/runtime/internal/lib/reflect/type.go index 5ff924cef0..9e1f353749 100644 --- a/runtime/internal/lib/reflect/type.go +++ b/runtime/internal/lib/reflect/type.go @@ -344,6 +344,11 @@ func pkgPathFor(t *abi.Type) string { func (t *rtype) Name() string { if !t.t.HasName() { + // For basic types (int, string, etc.), String() returns the type name directly. + // Basic types don't have TFlagNamed set, but they do have names. + if t.t.Kind() <= abi.UnsafePointer { + return t.String() + } return "" } s := t.String() From f84928d99f747d1a12a33f6c37b660e895a2f200 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 29 Dec 2025 11:48:20 +0800 Subject: [PATCH 2/2] test: add regression test for issue #1412 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add demo program to verify reflect.Type.Name() returns correct name for basic types (int, string, etc.) instead of empty string. Relates to #1412 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- _demo/go/reflectname-1412/main.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 _demo/go/reflectname-1412/main.go diff --git a/_demo/go/reflectname-1412/main.go b/_demo/go/reflectname-1412/main.go new file mode 100644 index 0000000000..e3e67b9641 --- /dev/null +++ b/_demo/go/reflectname-1412/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "fmt" + "reflect" +) + +func main() { + value := 42 + rv := reflect.ValueOf(value) + rt := reflect.TypeOf(value) + + fmt.Printf("Value: %v\n", rv.Interface()) + fmt.Printf("Kind: %v\n", rt.Kind()) + fmt.Printf("Name: %v\n", rt.Name()) + + if rt.Kind() != reflect.Int { + panic(fmt.Sprintf("Expected kind Int, got %v", rt.Kind())) + } + if rt.Name() != "int" { + panic(fmt.Sprintf("Expected name int, got %v", rt.Name())) + } + + fmt.Println("✓ Reflect test passed!") +}