我正在修复TinyGo编译器中的一些错误。目前,我在比特广播方面有一个怪异的问题。 IR代码如下:
%structcast.go.A = type { i32, i32, i32, i32 }
%structcast.go.B = type { i32, i32, i32, i32 }
...
%0 = load %structcast.go.B, %structcast.go.B* %b, !dbg !1851
%changetype = bitcast %structcast.go.B %0 to %structcast.go.A, !dbg !1852
call void @structcast.go.foo(%structcast.go.A %changetype, i8* undef, i8* undef), !dbg !1853
但是在进行IR验证时,我得到了:
Invalid bitcast
%changetype = bitcast %structcast.go.B %0 to %structcast.go.A, !dbg !1852
我想知道,该位广播到底有何违法行为?
答案 0 :(得分:1)
好吧,我自己弄清楚了:强制类型转换必须是非聚合类型,而struct是聚合:(