[Bug c/79479] -Woverflow false alarm in unreachable expression

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Feb 13 15:33:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79479

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Generalized extended testcase:

int
fn1 (long x)
{
  if (0)
    return __INT_MAX__ + 1;

  if (x || 0)
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */

  if (1 || 0)
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */

  if (0 && 0)
    return __INT_MAX__ + 1;

  if (0)
    return __INT_MAX__ + 1;
  else
    return 0;

  if (0)
    return 0;
  else
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */

  if (0)
    {
      if (x)
        return __INT_MAX__ + 1;
    }

  if (0)
    {
      if (x)
        return __INT_MAX__ + 1;
    }
  else
    {
      if (x)
        return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
    }

  if (0)
    if (0)
      return __INT_MAX__ + 1;

  if (1)
    return 0;
  else
    return __INT_MAX__ + 1;

  if (1)
    if (0)
      return __INT_MAX__ + 1;

  if (1)
    {
      if (x)
        return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
    }
  else
    {
      if (x)
        return __INT_MAX__ + 1;
    }

  if (0)
    return __INT_MAX__ + 1;
  else if (0)
    return __INT_MAX__ + 1;
  else
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */

  if (0)
    return __INT_MAX__ + 1;
  else if (1)
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
  else
    return __INT_MAX__ + 1;

  if (1)
    return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
  else if (0)
    return __INT_MAX__ + 1;

  return 0 ? __INT_MAX__ + 1 : 1;
}

void
fn2 (int x)
{
  if (0)
    x <<= sizeof (int) * __CHAR_BIT__;

  if (0)
    x <<= -1;

  if (0)
    x >>= sizeof (int) * __CHAR_BIT__;

  if (0)
    x >>= -1;
}


More information about the Gcc-bugs mailing list