llvm-gcc goes 10 rounds against the GNU mascot and loses, film at 11

Brian was kind enough to test llvmgcc against a bunch of GNU code. This
exposed all kinds of bugs, fixes below.

recode -- fails (bad headers, many ICEs)

Can you give me a list of headers it wants? It's usally pretty easy to
add them if I know what it needs...

cpio -- fails (dstring.c -- weird ssa bug)

Fixed. This was a C frontend bug (problem assigning temporary reg nums).

diffutils-- fails (analyze.c, diff.c and others)

The analyze.c bug is tested here:

and fixed here:

diff.c doesn't compile with the platform CC.

gnuchess -- fails (eval.c, main.c and others)

eval.c works now, perhaps because of other fixes.

main.c is tested here:

This was a bug in the C frontend treating 'char foo = "abcd";' as a
constant because the initializer was a const, even though the variable
itself wasn't const. Whoops. :slight_smile:

Another interesting part of my fix was that I discovered I wasn't marking
nearly as many globals as constant as I should (for example 'const int X =
7'). This is also fixed, tested here:

a2ps -- fails (fonts.c at -O2, and several others)

This works now, presumably because of other fixes

grep -- fails (regex.c)
rx -- fails (rxgnucomp.c)

These is because of a known problem passing structures by value. I added
a new testcase distilled from it, which is somewhat simpler than the
previously existing one:

New: http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20021209/001961.html
Old: test/Regression/CFrontend/2002-04-10-StructParameters.c

I will fix this eventually. :slight_smile:

enscript -- fails (afm.c)

This calls setjmp, which isn't supported yet.

Thanks for all of the reports!!