/* { dg-do run } */
/* { dg-options "-std=gnu99" } */
/* { dg-require-effective-target trampolines } */


int main()
{
	int n = 1;

	char tmp[2] = { 0 };
	typeof(char (*)[++n]) bar(void) { return &tmp; }

	if (2 != n)
		__builtin_abort();

	if (2 != sizeof(*bar()))
		__builtin_abort();

	if (2 != n)
		__builtin_abort();

	n = 1;

	typeof(char (*)[++n]) (*bar2)(void) = bar;

	if (2 != n)
		__builtin_abort();

	if (2 != sizeof(*(*bar2)()))
		__builtin_abort();

	if (2 != n)
		__builtin_abort();
}