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).