为什么它是"常数表达式类型不匹配"

时间:2018-04-02 23:02:45

标签: llvm llvm-3.0

@.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代码时,它说&#34;常量表达式类型不匹配&#34;。我不知道原因。

1 个答案:

答案 0 :(得分:0)

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

1 如果错误消息更具体,那将更加明显。像“[34 x i8]预期的那样,但发现[80 x i8]”将是我书中的重大改进。啊,好吧。