view gcc/testsuite/gcc.dg/torture/pr42363.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

/* PR middle-end/pr42363, extended from the test for PR middle-end/37913.  */
/* { dg-do compile } */
/* { dg-options "-g" } */

void foo (void) __attribute__ ((noreturn));

static int __attribute__ ((noreturn))
bar (void)
{
  foo ();
}

int
baz (void)
{
  int i = bar ();
  return i + 1;
}

int fooz (void) __attribute__ ((noreturn));

static int __attribute__ ((noreturn))
bart (void)
{
  return fooz (); /* { dg-warning "noreturn" } */
}

int bazr (void)
{
  int i = bart ();
  return i + 1;
}

static inline int
bard (void)
{
  return fooz ();
}

int bizr (void)
{
  int i, j;

  i = j = bard ();

  return i + 1;
}

/* This might be regarded as pure and folded, rather than inlined,
   but because it's pure evil it's diagnosed and the noreturn attribute
   is dropped.  The const attribute is dropped as well because it's
   mutually exclusive with pure.  */
static int __attribute__ ((pure, const, noreturn))
barf (void) {
  /* { dg-warning "ignoring attribute .const." "const" { target *-*-* } .-1 } */
  /* { dg-warning "ignoring attribute .noreturn." "noreturn" { target *-*-* } .-2 } */

  /* The noreturn attribute is ignored so verify there is no warning
     for returning from the function:
     { dg-bogus "does return" } */
}

static int __attribute__ ((pure, const))
bark (void) {   /* { dg-warning "ignoring attribute .const." } */
  barf ();
}

int buzr (void)
{
  int i, j;

  i = j = bark () + bark ();

  return i + 1;
}

int buzt (void)
{
  int i, j;

  i = j = barf () + barf ();

  return i + 1;
}

void bust (void)
{
  while (barf ())
    ;
}