[LLVMdev] There are compiling errors when converting bytecode to c by LLC

Fei Jia j.jiafei at gmail.com
Mon Oct 31 16:55:36 PDT 2011


Dear Dmitry,

Thanks for your reply. I have just updated my version from svn sever and
it's perfect now. The previous version is from the svn server several days
before Oct 10, and I guess the code related with gcc might not be updated
at that time.

Thanks a lot!

--
Best Regards,
Fei Jia




On Sat, Oct 29, 2011 at 4:43 PM, Dmitry N. Mikushin <maemarcus at gmail.com>wrote:

> Hi Fei Jia,
>
> What revision are you using? I suggest you to try C backend with the
> most recent LLVM version, if possible. I recall I had some similar C
> backend breakages in July-August: structs definitions were lost
> somewhere. To my understanding, the correct result should look like
> this:
>
> /* Typedefs */
> typedef struct l_unnamed_0 l_unnamed_0;
> typedef struct l_unnamed_1 l_unnamed_1;
>
> /* Structure contents */
> struct l_unnamed_0 {
>  unsigned char array[12];
> };
>
> struct l_unnamed_1 {
>  unsigned char array[13];
> };
>
> /* Global Variable Declarations */
> static l_unnamed_0 _OC_cst;
> static l_unnamed_1 _OC_cst1;
>
> /* Global Variable Definitions and Initialization */
> extern static l_unnamed_0 _OC_cst = { "hello world" };
> extern static l_unnamed_1 _OC_cst1 = { "hello world1" };
>
> - D.
>
> 2011/10/11 Fei Jia <j.jiafei at gmail.com>:
> > I convert C to bytecode by LLVM, and then convert the bytecode back to C
> by
> > LLC, but the generated C code cannot be compiled. Could anyone give me
> some
> > suggestions? Thanks!
> > The initial C file is rather simple (hello world):
> >
> > #include <stdio.h>
> >
> > int main() {
> >
> >         printf("hello world\n");
> >
> >         printf("hello world1\n");
> >
> >         return 0;
> >
> > }
> >
> > The two commands:
> >
> > llvm-gcc -emit-llvm -c -o hello.bc hello.c
> >
> > llc -march=c hello.bc
> >
> > Version of LLVM: 2.9
> >
> > The source of error in generated c file:
> >
> > /* Global Variable Declarations */
> >
> > static _OC_str { unsigned char array[12]; };
> >
> > static _OC_str1 { unsigned char array[13]; };
> >
> >
> >
> > /* Global Variable Definitions and Initialization */
> >
> > static _OC_str { unsigned char array[12]; } = { "hello world" };
> >
> > static _OC_str1 { unsigned char array[13]; } = { "hello world1" };
> >
> > It seems that _OC_str, and _OC_str1 are structure variables, but I have
> > never seen such way of declarations, definitions, and initialization of
> > structure in C code. I guess it may be supported in some standards of C.
> > Could anyone please give me some information about the problem? Thanks!
> > --
> > Best Regards,
> > Fei Jia
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111031/dbc6d962/attachment.html>


More information about the llvm-dev mailing list