[LLVMdev] c char translated to i8 signext
Jonathan S. Shapiro
shap at eros-os.com
Wed Apr 30 11:06:03 PDT 2008
Ryan:
Not sure if this helps, but...
In the absence of an explicit signed/unsigned qualifier, the ANSI C
standard states that the signedness of char is implementation defined.
In the absence of a prototype, the compiler is obliged to pass that char
as a word, which (if char is signed) requires sign extend.
In the presence of a prototype, the sign extend is probably not strictly
required, but doing it regardless is a partial defense against certain
classes of common programming errors (not sure if this is what is going
on here).
So: if you don't have a prototype visible at the call site, add one and
see what happens.
shap
On Wed, 2008-04-30 at 12:55 -0500, Ryan M. Lefever wrote:
> I have a c function that takes a char as a parameter. When it is
> compiled to bytecode, it gets translated to i8 signext. Why is signext
> getting added to the type? It doesn't get added if the parameter is an
> int. Is there a way to alter the parameter in the c code so that it
> simply gets translated to an i8, or is there a way in LLVM to modify the
> parameter's type?
>
> By the way, I am using LLVM 2.1 in case this has been changed since then.
>
> Regards,
> Ryan
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list