【问题标题】:Why it is "constant expression type mismatch"为什么是“常量表达式类型不匹配”
【发布时间】:2018-04-02 23:02:44
【问题描述】:
@.str = private constant [34 x i8] c"<17 x i15><%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i>\0A\00", align 1
declare i32 @printf(i8*, ...)

define i32 @main() {
    %a = add <17 x i15> 
             <i15 3, i15 7, i15 11, i15 0, i15 12, i15 14, i15 3, i15 7, i15 11, i15 0, i15 12, i15 14, i15 3, i15 7, i15 11, i15 0, i15 12>, 
             <i15 4, i15 13, i15 15, i15 6, i15 22, i15 18, i15 14, i15 17, i15 12, i15 18, i15 13, i15 11, i15 61, i15 76, i15 -21, i15 15, i15 44>
    %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i32 0, i32 0), i15 %a0, i15 %a1, i15 %a2, i15 %a3, i15 %a4, i15 %a5, i15 %a6, i15 %a7, i15 %a8, i15 %a9, i15 %a10, i15 %a11, i15 %a12, i15 %a13, i15 %a14, i15 %a15, i15 %a16)
    ret i32 0

}

当我尝试运行这个 llvm 代码时,它说“常量表达式类型不匹配”。我不知道这是什么原因。

【问题讨论】:

    标签: llvm llvm-3.0


    【解决方案1】:

    你的字符串有80个字符长,所以它的类型是[80 x i8],但是你声明它为[34 x i8],导致类型不匹配1。将 34 更改为 80(也在您使用字符串的地方),它应该可以正常工作。

    1 如果错误消息更具体,这将更加明显。类似“[34 x i8] 预期,但[80 x i8] 发现”之类的内容将是我书中的一个重大改进。啊,好吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-13
      • 2022-10-08
      • 2011-11-15
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多