https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51836

Eric Gallager <egallager at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
                 CC|                            |egallager at gcc dot gnu.org

--- Comment #1 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Prasoon from comment #0)
> Consider the following example
> 
> 
> int main()
> { 
>       int i=10;
>       i += (i , i++, i) + i; // also invokes UB
> }
> 
> 
> prasoon@Prasoon:~/test_code$ cat ub.cpp
> int main()
> { 
>       int i=10;
>       i += (i , i++, i) + i; // also invokes UB
> }
> prasoon@Prasoon:~/test_code$ g++ -Wsequence-point ub.cpp
> prasoon@Prasoon:~/test_code$ 
> 
> I don't get any warning like 'operation on 'i' may be undefined.
> 

This one now warns:

$ /usr/local/bin/g++ -c -Wsequence-point 51836.cc
51836.cc: In function ‘int main()’:
51836.cc:4:13: warning: operation on ‘i’ may be undefined [-Wsequence-point]
  i += (i , i++, i) + i; // also invokes UB
            ~^~
$

> Another similar example
> 
> int main()
> {
>     char *str;
>     char array[100]= "Hello";
>     if((str = array)[0] == 'H'){
>          //do something
>     }
> }
> 
> As per my understanding (str = array)[0] also invokes UB but no warning is
> given by g++ even after using that option.
> 
> Another example is 
> 
> int main()
> {
>    int a = 10;
>    ++a = 100; // UB
> }

These next ones still don't warn, although I think they might be duplicates of
other bugs. Your 3rd example looks like bug 57039 but the example in that one
now warns. Gonna leave this UNCONFIRMED until I finish searching for
duplicates.

Reply via email to