LLVM中动态数组的常量/全局变量声明问题求助
LLVM中动态数组的常量/全局变量声明问题求助
我正在为自己的玩具语言实现动态数组模型,目前规划的结构是:定义一个基础结构体%anyarray_base,包含虚表指针和运行时数组大小,然后具体的字节数组%bytearray继承这个基础结构,后面跟着一个零长度的字节数组作为payload占位:
%anyarray_base = type { %other_stuff, i64 ; runtime size } %bytearray = type { %anyarray_base, [0 x i8] }
这个方案在运行时动态创建数组时完全没问题:我会malloc足够的内存,容纳%anyarray_base加上实际数据的大小,用getelementptr也能正常访问[0 x i8]里的内容。
但遇到常量数组的时候就出问题了!比如我想把源码里的常量字符串"Hello World"转换成LLVM模块里的全局常量,我写了这样的代码:
@myConstantString = global %bytearray { %anyarray_base { @other_stuff, ; 数组的常量元数据 i64 12 ; 数组大小,12字节 }, [12 x i8] c"Hello, World!" ; 源码中的字符串字面量 }
结果llvm-as直接抛出错误:
error: element 1 of struct initializer doesn't match struct element type
我肯定是对LLVM的结构体初始化规则理解有偏差,有没有大佬能帮我解决这个问题,让我的玩具语言能正确处理这个"Hello World"常量数组呀?
备注:内容来源于stack exchange,提问作者marstato
相关产品推荐
相关产品推荐

