------- Comment #8 from pinskia at gcc dot gnu dot org 2006-04-18 00:21 -------
(In reply to comment #7)
> (In reply to comment #6)
> > In C, there is no ordering left to right, please go read the C FAQ at:
> > http://www.eskimo.com/~scs/c-faq.com/expr/index.html
> > subpage:
> > http://www.eskimo.com/~scs/c-faq.com/expr/comma.html
> The problem has nothing to do with ordering. It is in because arguments are
> evaluated not completely before the next one is evaluated.
Even then, the order inside the epxressions is not specified which means
a+b+c+d can be such that the a, b, c, and d subexpressions are in any order as
long as there are not squence points, even then it is only the a partial
ordering.
For an example:
(a, b) + (c, d) + (e, f)
can be evaulated in the following order and would be still be valid:
a c e b d f add add
or
a b c e d f add add
as long as the ordering of a comes before b and c comes before d and e comes
before f, it is valid. This is what is meant by partial ordering.
therefor in your orginal expample we have:
f ("", OP0(f0()), OP1(f1()), OP2(f2()));
the ordering here of each sub expression is not specified in that
f0() might come before f2() but it does have to come before the call to f and
the operation OP0 just because of dependicies.
Hopefully this explains what is going on here and why this bug is invalid and
is a dup of PR 11751.
What you need to think of is that the comma in a function call is just a
seperator and there is no evaulation requirement on which expression (or
subexpression) gets evaulated first in the same way:
(a++ + b++) + (a++ + b++);
there is no requirment which a++ (or b++) is evaulated first.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27153