]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/c2x-qual-6.c
ef2331657b27e3f15b04982f911c496edb42e4a7
1 /* { dg-do compile } */
2 /* { dg-options "-std=c2x -Wc11-c2x-compat -pedantic-errors" } */
4 void transpose0(double* out
, const double* in
) { }
5 void transpose1(double out
[2][2], const double in
[2][2]) { }
6 void transpose2(double out
[2][2][2], const double in
[2][2][2]) { }
8 int (*x2(const int x
[3][3]))[3] { return x
; } /* { dg-warning "before C23" } */
9 /* { dg-error "return discards" "" { target *-*-* } .-1 } */
10 const int (*x3(int x
[3][3]))[3] { return x
; } /* { dg-warning "before C23" } */
19 const double z1
[2][2];
23 const double z2
[2][2][2];
25 tvoid(z0
); /* { dg-error "passing argument 1 of 'tvoid' discards 'const' qualifier from pointer target type" } */
26 tvoid(z1
); /* { dg-error "passing argument 1 of 'tvoid' discards 'const' qualifier from pointer target type" } */
27 tvoid(z2
); /* { dg-error "passing argument 1 of 'tvoid' discards 'const' qualifier from pointer target type" } */
33 p
= z0
; /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
34 p
= z1
; /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
35 p
= z2
; /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
42 transpose0(pc
, p
); /* { dg-error "passing argument 1 of 'transpose0' discards 'const' qualifier from pointer target type" } */
43 transpose1(pc
, p
); /* { dg-error "passing argument 1 of 'transpose1' discards 'const' qualifier from pointer target type" } */
44 transpose2(pc
, p
); /* { dg-error "passing argument 1 of 'transpose2' discards 'const' qualifier from pointer target type" } */
46 transpose1(p
, pc
); /* { dg-warning "before C23" } */
47 transpose2(p
, pc
); /* { dg-warning "before C23" } */
48 // passing as arguments
50 transpose1(y1
, o1
); /* { dg-error "passing argument 2 of 'transpose1' from incompatible pointer type" } */
51 transpose1(y1
, x1
); /* { dg-warning "before C23" } */
52 transpose2(y2
, o2
); /* { dg-error "passing argument 2 of 'transpose2' from incompatible pointer type" } */
53 transpose2(y2
, x2
); /* { dg-warning "before C23" } */
55 const double (*x0p
) = x0
;
56 const double (*x1p
)[2] = x1
; /* { dg-warning "before C23" } */
57 const double (*x2p
)[2][2] = x2
; /* { dg-warning "before C23" } */
58 double (*v0p
) = z0
; /* { dg-error "initialization discards 'const' qualifier from pointer target type" } */
59 double (*v1p
)[2] = z1
; /* { dg-warning "before C23" } */
60 /* { dg-error "initialization discards" "" { target *-*-* } .-1 } */
61 double (*v2p
)[2][2] = z2
; /* { dg-warning "before C23" } */
62 /* { dg-error "initialization discards" "" { target *-*-* } .-1 } */
66 x1p
= x1
; /* { dg-warning "before C23" } */
67 x2p
= x2
; /* { dg-warning "before C23" } */
71 &(x1
[1]) - &(z1
[0]); /* { dg-warning "before C23" } */
72 &(x2
[1]) - &(z2
[0]); /* { dg-warning "before C23" } */
75 x1
== z1
; /* { dg-warning "before C23" } */
76 x2
== z2
; /* { dg-warning "before C23" } */
78 x1
< z1
; /* { dg-warning "before C23" } */
79 x2
< z2
; /* { dg-warning "before C23" } */
81 x1
> z1
; /* { dg-warning "before C23" } */
82 x2
> z2
; /* { dg-warning "before C23" } */
83 // conditional expressions
85 (void)(1 ? x1
: z1
); /* { dg-warning "before C23" } */
86 (void)(1 ? x2
: z2
); /* { dg-warning "before C23" } */
87 (void)(1 ? x0
: x1
); /* { dg-error "pointer type mismatch in conditional expression" } */
88 (void)(1 ? x1
: x2
); /* { dg-error "pointer type mismatch in conditional expression" } */
89 (void)(1 ? x2
: x0
); /* { dg-error "pointer type mismatch in conditional expression" } */
90 v0p
= (1 ? z0
: v0p
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
91 v1p
= (1 ? z1
: v1p
); /* { dg-warning "before C23" } */
92 /* { dg-error "assignment discards" "" { target *-*-* } .-1 } */
93 v2p
= (1 ? z2
: v2p
); /* { dg-warning "before C23" } */
94 /* { dg-error "assignment discards" "" { target *-*-* } .-1 } */
95 v0p
= (1 ? x0
: x0p
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
96 v1p
= (1 ? x1
: x1p
); /* { dg-error "assignment discards" } */
97 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
98 v2p
= (1 ? x2
: x2p
); /* { dg-error "assignment discards" } */
99 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
100 (1 ? x0
: z0
)[0] = 1; /* { dg-error "assignment of read-only location" } */
101 (1 ? x1
: z1
)[0][0] = 1; /* { dg-error "assignment of read-only location" } */
102 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
103 (1 ? x2
: z2
)[0][0][0] = 1; /* { dg-error "assignment of read-only location" } */
104 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
105 v0p
= (1 ? p
: z0
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
106 v1p
= (1 ? p
: z1
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
107 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
108 v2p
= (1 ? p
: z2
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
109 /* { dg-warning "before C23" "" { target *-*-* } .-1 } */
110 v0p
= (1 ? pc
: x0
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
111 v1p
= (1 ? pc
: x1
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */
112 v2p
= (1 ? pc
: x2
); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */