Problems in array access
Hello GCC mailing list, In one of my friend's C programming class, they asked him a question on the topic of array bounds based on the follwing code snippet: #include int main(void) { char str[] = {'G' , 'C' , 'C' }; str[3] = '\0' ; /* Isn't this invalid? */ printf("%s\n", str); } In an ideal case, str[3] should be a case of out-of-bound array access. But when compiling the above with -Wall option flag GCC shows no warning. So, am I missing something? Thank you, Utkarsh Singh -- Utkarsh Singh http://utkarshsingh.xyz
Re: Problems in array access
On Tue, 31 Aug 2021 at 09:11, Utkarsh Singh wrote: > > Hello GCC mailing list, > > In one of my friend's C programming class, they asked him a question on > the topic of array bounds based on the follwing code snippet: > > #include > > int main(void) > { > char str[] = {'G' , 'C' , 'C' }; > str[3] = '\0' ; /* Isn't this invalid? */ > printf("%s\n", str); > } > > In an ideal case, str[3] should be a case of out-of-bound array access. > But when compiling the above with -Wall option flag GCC shows no > warning. So, am I missing something? This question belongs on the gcc-help mailing list, not here. The code has undefined behaviour. Some GCC warnings depend on checks done during optimization. GCC will warn about this code if you use -Wall -O2 and you will get a runtime error if you compile with -fsanitize=undefined
Re: Problems in array access
On 2021-08-31, 09:28 +0100, Jonathan Wakely wrote: > On Tue, 31 Aug 2021 at 09:11, Utkarsh Singh wrote: >> >> Hello GCC mailing list, >> >> In one of my friend's C programming class, they asked him a question on >> the topic of array bounds based on the follwing code snippet: >> >> #include >> >> int main(void) >> { >> char str[] = {'G' , 'C' , 'C' }; >> str[3] = '\0' ; /* Isn't this invalid? */ >> printf("%s\n", str); >> } >> >> In an ideal case, str[3] should be a case of out-of-bound array access. >> But when compiling the above with -Wall option flag GCC shows no >> warning. So, am I missing something? > > This question belongs on the gcc-help mailing list, not here. Sorry! I will keep this in mind. > The code has undefined behaviour. > > Some GCC warnings depend on checks done during optimization. GCC will > warn about this code if you use -Wall -O2 and you will get a runtime > error if you compile with -fsanitize=undefined Great! And thank you for a quick reply. -- Utkarsh Singh http://utkarshsingh.xyz
Re: Problems in array access
On 8/31/21 2:39 AM, Utkarsh Singh via Gcc wrote: On 2021-08-31, 09:28 +0100, Jonathan Wakely wrote: On Tue, 31 Aug 2021 at 09:11, Utkarsh Singh wrote: Hello GCC mailing list, In one of my friend's C programming class, they asked him a question on the topic of array bounds based on the follwing code snippet: #include int main(void) { char str[] = {'G' , 'C' , 'C' }; str[3] = '\0' ; /* Isn't this invalid? */ printf("%s\n", str); } In an ideal case, str[3] should be a case of out-of-bound array access. But when compiling the above with -Wall option flag GCC shows no warning. So, am I missing something? This question belongs on the gcc-help mailing list, not here. Sorry! I will keep this in mind. The code has undefined behaviour. Some GCC warnings depend on checks done during optimization. GCC will warn about this code if you use -Wall -O2 and you will get a runtime error if you compile with -fsanitize=undefined To refine Jonathan's answer: In cases where the index is constant like this one the warning could be issued even with no optimization. That it isn't is the result of the choice to depend on optimizations unconditionally. It's worth revisiting this choice in the future. If you would like to see such a change for -Warray-bounds (or any other warning) please open requests in Bugzilla. Martin Great! And thank you for a quick reply.
PING: [RFC] Whole Program Devirtualization
Honza, How do you think about proposal in this RFC? Thanks a lot. Best Regards, Feng From: Martin Liška Sent: Friday, August 20, 2021 9:45 PM To: Feng Xue OS; gcc@gcc.gnu.org Cc: JiangNing OS; Jan Hubicka Subject: Re: [RFC] Whole Program Devirtualization ... adding Honza to CC who spent quite some time on devirtualization pass. Martin
Re: Problems in array access
On 2021-08-31, 09:08 -0600, Martin Sebor wrote: > To refine Jonathan's answer: In cases where the index is constant > like this one the warning could be issued even with no optimization. > That it isn't is the result of the choice to depend on optimizations > unconditionally. It's worth revisiting this choice in the future. > If you would like to see such a change for -Warray-bounds (or any > other warning) please open requests in Bugzilla. Sure! Currently user account registration is restricted at Bugzilla, I will request it ASAP. -- Utkarsh Singh http://utkarshsingh.xyz