This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/51836] -Wsequence-point fails when convoluted expressions with multiple side effects are used
- From: "egallager at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 22 Aug 2017 01:09:24 +0000
- Subject: [Bug c++/51836] -Wsequence-point fails when convoluted expressions with multiple side effects are used
- Auto-submitted: auto-generated
- References: <bug-51836-4@http.gcc.gnu.org/bugzilla/>
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.