public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/97278] New: increment or decrement operator on the same object
@ 2020-10-03 6:43 tangyixuan at mail dot dlut.edu.cn
2020-10-03 8:32 ` [Bug c++/97278] " jakub at gcc dot gnu.org
0 siblings, 1 reply; 2+ messages in thread
From: tangyixuan at mail dot dlut.edu.cn @ 2020-10-03 6:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97278
Bug ID: 97278
Summary: increment or decrement operator on the same object
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tangyixuan at mail dot dlut.edu.cn
Target Milestone: ---
Hi, the parameters of 'func' are based on the values of 'i'. if 'a' is 4, does
it mean that 'i' is increased after '++i' and 'i++'? So, why the value of 'b'
is 2?
$ cat s.cpp
#include <iostream>
using namespace std;
int func(int a, int b)
{
cout << a << " " << b <<"\n";
return a << b;
}
int main()
{
int i = 2;
cout << func(++i, i++) << "\n";
};
$ g++ s.cpp
$ ./a.out
4 2
16
$ clang++ s.cpp
$ ./a.out
3 3
24
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Bug c++/97278] increment or decrement operator on the same object
2020-10-03 6:43 [Bug c++/97278] New: increment or decrement operator on the same object tangyixuan at mail dot dlut.edu.cn
@ 2020-10-03 8:32 ` jakub at gcc dot gnu.org
0 siblings, 0 replies; 2+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-10-03 8:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97278
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
CC| |jakub at gcc dot gnu.org
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Your testcase is invalid, even C++17 and later, therefore you can get any
result.
While C++17 added some extra evaluation ordering rules over earlier C++
revisions, for calls, i.e. postfix-expression ( expression-list_opt_ )
the standard now says:
The postfix-expression is sequenced before each expression in the
expression-list and any default argument. The initialization of a parameter,
including every associated value computation and side effect, is
indeterminately sequenced with respect to that of any other parameter. [Note:
All side effects of argument evaluations are sequenced before the function is
entered (see 6.9.1). — end note]
so while side-effects in the postfix-expression need to be evaluated before the
arguments, there is no sequence point between the arguments.
g++ even warns about this with -Wall:
pr92278.C: In function ‘int main()’:
pr92278.C:9:42: warning: operation on ‘i’ may be undefined [-Wsequence-point]
9 | __builtin_printf ("%d\n", func(++i, i++));
| ~^~
pr92278.C:9:42: warning: operation on ‘i’ may be undefined [-Wsequence-point]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-10-03 8:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-03 6:43 [Bug c++/97278] New: increment or decrement operator on the same object tangyixuan at mail dot dlut.edu.cn
2020-10-03 8:32 ` [Bug c++/97278] " jakub at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).