Keith said:
... There is no C construct that would be expected to cause a
compiler to run out of memory (unless it's just an incredibly
huge program, ...
It doesn't have to be 'incredibly huge'. The following 21 lines
crashes my port of gcc...
#define BC1(p) p,1+p
#define BC2(p) BC1(p),BC1(1+p)
#define BC3(p) BC2(p),BC2(1+p)
#define BC4(p) BC3(p),BC3(1+p)
#define BC5(p) BC4(p),BC4(1+p)
#define BC6(p) BC5(p),BC5(1+p)
#define BC7(p) BC6(p),BC6(1+p)
#define BC8(p) BC7(p),BC7(1+p)
#define BC9(p) BC8(p),BC8(1+p)
#define BC10(p) BC9(p),BC9(1+p)
#define BC11(p) BC10(p),BC10(1+p)
#define BC12(p) BC11(p),BC11(1+p)
#define BC13(p) BC12(p),BC12(1+p)
#define BC14(p) BC13(p),BC13(1+p)
#define BC15(p) BC14(p),BC14(1+p)
#define BC16(p) BC15(p),BC15(1+p)
#define BC17(p) BC16(p),BC16(1+p)
#define BC18(p) BC17(p),BC17(1+p)
#define BC19(p) BC18(p),BC18(1+p)
#define BC20(p) BC19(p),BC19(1+p)
unsigned char bc[] = { BC20(0) };