Pre-DR: compound literal reinitialization ========================================= Consider the code: #include int main() { int i = 0; int* p; top: p = &((int) {1}); printf("%d\n", *p); *p = 77; if (i++ == 0) goto top; return 0; } A test in a C validation suite expects that the compound literal is not reinitialized the second time it is executed, so the program prints: 1 77 My view is that the standard is clear that the compound literal is reinitialized each time, so the program prints: 1 1 My view is that whenever the compound literal is reached in the order of execution, the initializer is executed and the value stored in the object as in 6.7.8, which is referenced from 6.5.2.5#7. But the explicit statement that an initializer is executed whenever an ordinary declaration is reached in the order of execution is found in 6.8#3 instead of in 6.7.8. This disagreement shows that the standard is in practice unclear in this area.