Hacker News new | past | comments | ask | show | jobs | submit login

These kinds of warnings need optimizations enabled.

    $ gcc -O2 -Wall -c t.c 
    t.c: In function ‘main’:
    t.c:3:14: warning: array subscript 20 is outside array bounds of ‘int[10]’ [-Warray-bounds]
        3 |       return *(x+20);
          |              ^~~~~~~
    t.c:2:11: note: at offset 80 into object ‘x’ of size 40
        2 |       int x[10];
          |           ^
Not sure how to get Clang to warn. It clearly recognizes the undefined behavior.



Clang appears to have -Warray-bounds-pointer-arithmetic for this, though not enabled on -Wall nor -Wextra. (fwiw, clang has -Weverything to turn on literally every warning, including conflicting ones, for finding what flags there are)


Yeah, Clang warns on x[20] but not *(x+20) even with -Wall and -O2. It's kinda weird.


Ah, the -Warray-bounds-pointer-arithmetic warning is actually just about the pointer addition; thus even that doesn't warn on *(x+10) on the 10-element array, as the construction of the past-the-end pointer is still valid, and seemingly no warning checks bounds validity for actual dereference.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: