Hi,

On Wed, 26 Oct 2011, Kai Tietz wrote:

> >> > int f(char *i, int j)
> >> > {
> >> >        if (*i && j!=2)
> >> >                return *i;
> >> >        else
> >> >                return j;
> >> > }
> >>
> 
> the case can be produced quite easily.
> 
> extern int global = 0;
> 
> ....
>   if (*a && global) ...

See?  You had to change the program to prove the transformation to be 
invalid.  But my point was that the function we discuss about was exactly 
as above.  It didn't have globals, or two loads, or a volatile, or 
anything else you can come up with where the transformation would be 
detectable (and hence invalid).  I claim that you can't construct a 
program that can distinguish between this function:

int f(char *i, int j)
{
  if (*i && j!=2)
    return *i;
  else
    return j;
}

and this one:

int f(char *i, int j)
{
  if (*i & j!=2)
    return *i;
  else
    return j;
}

And if you can't construct such a program, then the initial transformation 
before the fold-const.c change _for this specific situation_ was correct.


Ciao,
Michael.

Reply via email to