[LLVMdev] Newbie question: LLVM IR, printf, and varargs

Eli Bendersky
Tue, 03 Dec 2013 22:47:38 -0000

On Tue, Dec 3, 2013 at 2:29 PM, Mikael Lyngvig <mikael at lyngvig.org>
wrote:

> Hi,
>
> I am trying to print two strings using printf.  I have tried various
> things, but keep getting this error:
>
>     llc: printf.ll:4:11: error: '@printf' defined with type
'i32 (i8*,
> ...)*'
>         %1 = call i32 @printf(i8* null, i8*, i8* null)
>
> The code is:
>
>    declare i32 @printf(i8* nocapture readonly, ...) nounwind
>
>    define i32 @main() nounwind {
>       %1 = call i32 @printf(i8* null, i8* null)
>       ret i32 0
>   }
>
> I am aware that the call will core dump, but I am initially only trying to
> figure out why LLC won't accept the call itself.  I started out trying
with
> real values and then reduced it to the above to see if I could make it
> work.  Comparing with the output of Clang didn't help; it does the same
-
> passes in two i8* pointers and declares @printf in the same way (and LLC
> accepts the Clang output as valid input).  The Clang code goes as follows
> (edited snippet):
>
> @.str = private unnamed_addr constant [11 x i8] c"Error:
%s\0A\00", align 1
> @.str1 = private unnamed_addr constant [5 x i8] c"Test\00", align
1
>
> define i32 @main() nounwind {
>   %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x
> i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8]* @.str1,
> i32 0, i32 0)) nounwind
>   ret i32 0
> }
>
> declare i32 @printf(i8* nocapture readonly, ...) nounwind
>
> A good thing about this question is that the answer will find its way into
> the Mapping Highlevel doc, which is why I am asking it in the first place.
>
> This is on Windows using a 32-bit version of LLVM llc v3.4 (built about a
> week ago).
>
> I searched the LR, the FAQ, and Google but found nothing of relevance.
>
>
You're missing the cast, IMHO. The cast appeases the LLVM type checker
w.r.t. mismatching function type

Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20131203/a52aa024/attachment.html>