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 */
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!
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:
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.