/* Tests for labels before declarations and at ends of compound statements
 * in combination with attributes. */
/* { dg-do compile } */
/* { dg-options "-std=c2x -Wall" } */

int f(void) 
{ 
	goto b;
	a: int i = 0;
	aa: __attribute__((unused)) int u = 0; int v = 0;	/* { dg-warning "GNU-style attribute between label and declaration appertains to the label" } */
           goto c;
	{ c: }
	b: goto a;
	return i + u + v;
        d: __attribute__((unused)) (void)0;
        e: __attribute__((unused))
}

int g(void) 
{ 
	goto b;
	a: int i = 0;
	[[maybe_unused]] aa: int u = 0; int v = 0;
           goto c;
	{ c: }
	b: goto a;
	return i + u + v;
        [[maybe_unused]] d: (void)0;
        [[maybe_unused]] e:
}

void h(void)
{
	[[maybe_unused]] a: [[maybe_unused]] b: [[maybe_unused]] int x;

	if (1)
		[[maybe_unused]] c: [[maybe_unused]] d: (void)0;
}
