jik:/tmp!88> cat foo.c typedef struct { int foo; } foo_t; #define CONST_FOO (foo_t) { 0 } foo_t foo[5][5] = { [ 0 ... 4 ] = { [ 0 ... 4 ] = CONST_FOO } }; jik:/tmp!89> gcc -c foo.c foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0][0]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0][1]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0][2]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0][3]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0][4]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[0]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[1]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[2]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[3]') foo.c:8: initializer element is not constant foo.c:8: (near initialization for `foo[4]') jik:/tmp!90> If you change the #define to "#define CONST_FOO { 0 }", it compiles. It compiles *without* that change with gcc 2.95.2.
See http://gcc.gnu.org/ml/gcc-patches/2002-01/msg00956.html
Fixed in gcc-3.1-0.18.