Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: Loops (was Re: do { quit; } else { }) Date: Tue, 13 May 2025 15:10:56 -0700 Organization: A noiseless patient Spider Lines: 53 Message-ID: <86msbgw49b.fsf@linuxsc.com> References: <20250413072027.219@kylheku.com> <20250415153419.00004cf7@yahoo.com> <86h62078i8.fsf@linuxsc.com> <20250504180833.00000906@yahoo.com> <86plggzilx.fsf@linuxsc.com> <86ldr4yx0x.fsf@linuxsc.com> <1000cs3$2234m$1@dont-email.me> <87sel8nqid.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Wed, 14 May 2025 00:10:57 +0200 (CEST) Injection-Info: dont-email.me; posting-host="adcc0210618ce5c814d2d263cc71a7bf"; logging-data="2180192"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MtnTOcWvxOJRmKcYJiNCNkCQ0z2PmJB8=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:oLM+9XjfFObBES3hpzENYs4wpCM= sha1:DFRvHVsplmW6AkXmwEJqJU0LpdA= Keith Thompson writes: > Janis Papanagnou writes: > >> On 12.05.2025 17:08, David Brown wrote: >> >>> On 11/05/2025 23:43, James Kuyper wrote: >> >> [...] >> >>>> More precisely, it makes it undefined behavior for values to point to an >>>> array of less than 10 doubles. >>> >>> The wording of the C standard (C11, as that's what I have open at the >>> moment) is : >>> >>> """ >>> If the keyword static also appears within the [ and ] of the array type >>> derivation, then for each call to the function, the value of the >>> corresponding actual argument shall provide access to the first element >>> of an array with at least as many elements as specified by the size >>> expression. >>> """ >> >> Oh! - This is somewhat surprising to me. - When I first read about >> the "arr[static N]" I assumed that it would be possible to pass any >> sub-array, say "&arr[8]" (or "arr+8") as long as it's large enough >> to still have N elements from the starting point, but the quote says >> explicitly "access to the _first_ element of an array" (which I'd >> interpret as "&arr[0]" (or "arr"). - Unless I misinterpreted that; >> what would be the reason for that? > > My personal interpretation is that this: > > void func(int arr[static 5]) { > } > > int main(void) { > int arr[10]; > func(arr+5); // OK > // func(arr+6); // UB > } > > is valid, because, for example, the last 5 elements of a 10-element > array object can be treated as a 5-element array object. gcc seems > to agree, based on the fact that it warns about func(arr+6) but > not about func(arr+5). > > This is a fundamental part of my mental model of C, but in a few > minutes of searching I wasn't able to find explicit wording in the > standard that supports it. In N1570, 6.7.6.3 p7.