On 8/31/21 2:39 AM, Utkarsh Singh via Gcc wrote:
On 2021-08-31, 09:28 +0100, Jonathan Wakely <jwakely....@gmail.com> 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 <stdio.h>

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.


Reply via email to