From 825e2eec51519620cf51e63e0b4dc87d54601cbd Mon Sep 17 00:00:00 2001 From: visualfc Date: Fri, 24 May 2024 07:38:06 +0800 Subject: [PATCH] ssa: fix type toNamed --- ssa/expr.go | 6 +++--- ssa/type.go | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ssa/expr.go b/ssa/expr.go index 6fce4fbe..314848a4 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -183,12 +183,12 @@ func (b Builder) Const(v constant.Value, typ Type) Expr { return prog.Null(typ) } raw := typ.raw.Type - switch t := raw.(type) { + switch t := raw.Underlying().(type) { case *types.Basic: kind := t.Kind() switch { case kind == types.Bool: - return prog.BoolVal(constant.BoolVal(v)) + return Expr{prog.BoolVal(constant.BoolVal(v)).impl, typ} case kind >= types.Int && kind <= types.Int64: if v, exact := constant.Int64Val(v); exact { return prog.IntVal(uint64(v), typ) @@ -202,7 +202,7 @@ func (b Builder) Const(v constant.Value, typ Type) Expr { return prog.FloatVal(v, typ) } case kind == types.String: - return b.Str(constant.StringVal(v)) + return Expr{b.Str(constant.StringVal(v)).impl, typ} } } panic(fmt.Sprintf("unsupported Const: %v, %v", v, raw)) diff --git a/ssa/type.go b/ssa/type.go index d8ba01a7..21c8c780 100644 --- a/ssa/type.go +++ b/ssa/type.go @@ -396,7 +396,8 @@ func (p Program) toNamed(raw *types.Named) Type { name := NameOf(raw) return &aType{p.toLLVMNamedStruct(name, t), rawType{raw}, vkStruct} default: - return p.rawType(t) + typ := p.rawType(t) + return &aType{typ.ll, rawType{raw}, typ.kind} } }