/* { dg-do compile } */
/* { dg-options "-std=c11" } */
/* Origin: Martin Uecker <uecker@eecs.berkeley.edu> */
void tvoid(void* x);
void transpose0(double* out, _Atomic double* in) { }
void transpose1(double out[2][2], _Atomic double in[2][2]) { }
void transpose2(double out[2][2][2], _Atomic double in[2][2][2]) { }
// return
int (*x2(_Atomic int x[3][3]))[3] { return x; } /* { dg-warning "returning '_Atomic int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */
_Atomic int (*x3(int x[3][3]))[3] { return x; } /* { dg-warning "returning 'int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */
void test(void)
{
	double x0[2];
	double y0[2];
	_Atomic double z0[4];
	double x1[2][2];
	double y1[2][2];
	double o1[2][3];
	_Atomic double z1[2][2];
	double x2[2][2][2];
	double y2[2][2][2];
	double o2[2][2][3];
	_Atomic double z2[2][2][2];
	tvoid(z0);
	tvoid(z1);
	tvoid(z2);
	// passing as arguments
	transpose0(y0, x0); /* { dg-warning "passing argument 2 of 'transpose0' from incompatible pointer type" } */
	transpose1(y1, o1); /* { dg-warning "passing argument 2 of 'transpose1' from incompatible pointer type" } */
	transpose1(y1, x1); /* { dg-warning "passing argument 2 of 'transpose1' from incompatible pointer type" } */
	transpose2(y2, o2); /* { dg-warning "passing argument 2 of 'transpose2' from incompatible pointer type" } */
	transpose2(y2, x2); /* { dg-warning "passing argument 2 of 'transpose2' from incompatible pointer type" } */
	// initialization
	_Atomic double (*x0p) = x0; /* { dg-warning "initialization of '_Atomic double \\*' from incompatible pointer type" } */
	_Atomic double (*x1p)[2] = x1; /* { dg-warning "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */
	_Atomic double (*x2p)[2][2] = x2; /* { dg-warning "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */
	// assignment
	x0p = x0; /* { dg-warning "assignment to '_Atomic double \\*' from incompatible pointer type" } */
	x1p = x1; /* { dg-warning "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */
	x2p = x2; /* { dg-warning "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */
	// subtraction
	&(x0[1]) - &(z0[0]); /* { dg-error "invalid operands to binary" } */
	&(x1[1]) - &(z1[0]); /* { dg-error "invalid operands to binary" } */
	&(x2[1]) - &(z2[0]); /* { dg-error "invalid operands to binary" } */
	// comparison
	x0 == z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x1 == z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x2 == z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x0 > z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x1 > z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x2 > z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x0 < z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x1 < z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	x2 < z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */
	// conditional expressions
	(void)(1 ? x0 : z0); /* { dg-warning "pointer type mismatch in conditional expression" } */
	(void)(1 ? x1 : z1); /* { dg-warning "pointer type mismatch in conditional expression" } */
	(void)(1 ? x2 : z2); /* { dg-warning "pointer type mismatch in conditional expression" } */
}

