Eric van Riet Paap
2007-Jan-15 11:12 UTC
[LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
Hello, I would like to ask the llvm developers to have a look at http:// llvm.org/bugs/show_bug.cgi?id=918 . This bug has been reported 4 month ago but is none the less a somewhat serious one. Below I have pasted the test case and output of the issue running on my ppc machine. thank you Eric pb:~ eric$ cat testme.ll;llvm-as -f testme.ll;llc -march=c -f testme.bc;gcc -c testme.cbe.c ;gcc --version;llc --version %structtype_s = type { i32 } %fixarray_array3 = type [3 x %structtype_s] define i32 %witness(%fixarray_array3* %p) { %q = getelementptr %fixarray_array3* %p, i32 0, i32 0, i32 0 %v = load i32* %q ret i32 %v } testme.cbe.c:106: error: array type has incomplete element type testme.cbe.c:119: warning: conflicting types for built-in function 'malloc' powerpc-apple-darwin8-gcc-4.0.0 (GCC) 4.0.0 (Apple Computer, Inc. build 5026) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Low Level Virtual Machine (http://llvm.org/): llvm version 2.0cvs Optimized build with assertions. pb:~ eric$ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070115/8c2e7bc0/attachment.html>
Nick Lewycky
2007-Jan-15 15:51 UTC
[LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
Eric van Riet Paap wrote:> *testme.cbe.c:106: error: array type has incomplete element type*The problem code boils down to: /* Structure forward decls */ struct l_structtype_s; /* Typedefs */ typedef struct l_structtype_s l_fixarray_array3[3]; which is illegal C, but perfectly valid C++, and g++ accepts it. The structure contents are defined right afterwards, but I assume that the typedefs are used when emitting the structure contents? We may have to put fully defined structures first and typedefs second. Nick Lewycky
Chris Lattner
2007-Jan-15 16:48 UTC
[LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
On Mon, 15 Jan 2007, Nick Lewycky wrote:> Eric van Riet Paap wrote: >> *testme.cbe.c:106: error: array type has incomplete element type* > > The problem code boils down to: > > /* Structure forward decls */ > struct l_structtype_s; > > /* Typedefs */ > typedef struct l_structtype_s l_fixarray_array3[3]; > > which is illegal C, but perfectly valid C++, and g++ accepts it. > > The structure contents are defined right afterwards, but I assume that > the typedefs are used when emitting the structure contents? We may have > to put fully defined structures first and typedefs second.Looks like it. It sounds like the CBE should build an ordering of types, based on their nesting properties, then emit them in nesting order. Because all recursive types have to go through a pointer in C, we should get a dag of types, which is easy to emit. Anyone want to take a crack at it? -Chris -- http://nondot.org/sabre/ http://llvm.org/
Maybe Matching Threads
- [LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
- [LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
- [LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
- [LLVMdev] llc c backend can produce code that doesn't compile on gcc 4.x
- [LLVMdev] bug? c backend produces code rejected by gcc4.0.1: array type has incomplete element type