File: pointer-array-atomic.c

package info (click to toggle)
gcc-riscv64-unknown-elf 8.3.0.2019.08%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 680,956 kB
  • sloc: ansic: 3,237,715; cpp: 896,882; ada: 772,854; f90: 144,254; asm: 68,788; makefile: 67,456; sh: 29,743; exp: 28,045; objc: 15,273; fortran: 11,885; python: 7,369; pascal: 5,375; awk: 3,725; perl: 2,872; yacc: 316; xml: 311; ml: 285; lex: 198; haskell: 122
file content (60 lines) | stat: -rw-r--r-- 3,581 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* { 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" } */
}