You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:13:11