Saturday, April 05, 2008

antlr is (not) broken (alias code too large)

After 2 hours of debugging this issue down, I've found out, that antlr is probably broken on too fast machines. My E6850 core 2 duo (3GHz) with antlr 3.0.1 generates simply too huge code, so that java can't compile it. (I don't hit the problems on same software configurations with different hardware – my notebook with core 2 duo neither another desktop AMD 64 dual core 4200+.)

If I run 2 this suckers:
cat /dev/zero > /dev/null &

and antlr under nice (nice java -cp ... org.antlr.Tool My.g) priority just for sure, it just gives out totally different code, shorter for about 15000 lines (diff). There must be some uglymoronic race.

EDIT: Ok, according to Terrence Parr (the antlr leader), it's not a bug from his point of view, see his comments below.

The trick is -Xconversiontimeout 600 on my machine.

Wednesday, April 02, 2008

Empty structure size in gcc and g++

Did you know that empty structure in GNU C has size 0, whereas in c++ it is 1 character?
#include <stdio.h>

struct A {

int main(void)
printf("%zu\n", sizeof(struct A));
return 0;

Output of this after gcc a.c -oac && ./ac is 0, g++ a.c -oac && ./ac will output 1...

See gnu cc manual, chapter 5.15.