Hi, Ian Lance Taylor <i...@google.com> skribis:
> 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’. Oh, and within ‘foo’ itself: int foo (int a, int x[a]) { return foo[a + 23]; /* <- warning here */ } > 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. Why use special syntax for this? It seems to me that ‘int x[a]’ conveys the exact same information. > 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. In that case the call site could just be ignored, or a “cannot determine array size” warning could be issued. > 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. Yes. Thanks, Ludo’.