/* Verify that attribute returns_nonnull on global and local function
   declarations is merged.
   { dg-do compile }
   { dg-options "-Wall -fdump-tree-optimized -fdelete-null-pointer-checks" }
   { dg-skip-if "" keeps_null_pointer_checks } */

void foo (void);


void frnn_local_local (void)
{
  __attribute__ ((returns_nonnull)) void* frnn1 (void);

  if (!frnn1 ())
    foo ();
}

void gnr_local_local (void)
{
  void* frnn1 (void);

  if (!frnn1 ())
    foo ();
}

void frnn_local_global (void)
{
  __attribute__ ((returns_nonnull)) void* frnn2 (void);

  if (!frnn2 ())
    foo ();
}

void* frnn2 (void);

void gnr_local_global (void)
{
  if (!frnn2 ())
    foo ();
}

__attribute__ ((returns_nonnull)) void* frnn3 (void);

void frnn_global_local (void)
{
  if (!frnn3 ())
    foo ();
}

void gnr_global_local (void)
{
  void* frnn3 (void);

  if (!frnn3 ())
    foo ();
}


/* { dg-final { scan-tree-dump-not "foo" "optimized" } } */
