/* { dg-do compile } */
/* APPLE LOCAL testsuite nested functions */
/* { dg-options "-O -fwhole-program -fnested-functions" } */

static void foo1 (void) { }					/* { dg-warning "have effect only on public" } */
extern void foo1 (void) __attribute__((externally_visible));

void foo2 (void)
{
  __attribute__((externally_visible)) void foo3 (void) { }	/* { dg-warning "have effect only on public" } */
}

__attribute__((externally_visible)) static void foo3 (void) { }	/* { dg-warning "have effect only on public" } */

static int bar1;
extern int bar1 __attribute__((externally_visible));		/* { dg-warning "have effect only on public" } */

static int bar2 __attribute__((externally_visible));		/* { dg-warning "have effect only on public" } */

void fn1 (void)
{
  static int bar3 __attribute__((externally_visible));		/* { dg-warning "have effect only on public" } */
}

void fn2 (void)
{
  int bar4 __attribute__((externally_visible));			/* { dg-warning "have effect only on public" } */
}

struct A
{
} __attribute__((externally_visible));				/* { dg-warning "does not apply to types" } */

typedef int B __attribute__((externally_visible));		/* { dg-warning "attribute ignored" } */
