ludovic.cour...@inria.fr (Ludovic Courtès) writes: > I understand. However, I’m concerned about keeping the information at > compile-time. For example: > > extern void foo (int a, int x[a]); > static void bar (void) { > int x[123]; > foo (456, x); > } > > Here the compiler could emit a diagnostic in ‘bar’. > > IOW, ABI restrictions ABI imply that nothing can be done in the body of > ‘foo’; however, the information could still used at call sites.
I see. That seems to have some potential. It would be a gcc extension, of course. Perhaps something like extern void foo (int a, int x[__attribute__ ((dim (a)))]) could be implemented. This would issue an error if foo were called such that the length of the x were not at least a. A serious problem with this approach would be that it is not reliable, since the caller of foo might not know the length of the array being passed as a pointer. I suppose it would be possible to issue runtime checks when static checks don't work, and issue a compilation error in cases were no runtime check is possible. Without those checks I think the extension would be ill advised. With those checks I don't know how often it would usable in practice. Ian