The the .vars dump for following functions (that only differ by the type of
their parameters):

void test55 (_Bool XXX, _Bool YYY)
{
  if (XXX && YYY)
    {
      if (!XXX)
        link_error ();
    }
}


void test555 (int XXX,  int YYY)
{
  if (XXX &&  YYY)
    {
      if (!XXX)
        link_error ();
    }
}


is: 

test555 (XXX, YYY)
{
<bb 0>:
  return;

}

test555 (XXX, YYY)
{
<bb 0>:
  if (XXX != 0 && YYY != 0) goto <L0>; else goto <L2>;

<L0>:;
  if (XXX == 0) goto <L1>; else goto <L2>;

<L1>:;
  link_error () [tail call];

<L2>:;
  return;

}

The pass that eliminates the link_error call for the first function is DOM1, but
unfortunatelly it does not do the same thing for the second function.

-- 
           Summary: DOM working for _Bool but not for int
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dann at godzilla dot ics dot uci dot edu
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20065

Reply via email to