1 |
689 |
jeremybenn |
/* Test for constant expressions: GNU extensions. */
|
2 |
|
|
/* Origin: Joseph Myers <joseph@codesourcery.com> */
|
3 |
|
|
/* { dg-do compile } */
|
4 |
|
|
/* { dg-options "-std=gnu90 -pedantic-errors" } */
|
5 |
|
|
|
6 |
|
|
int n;
|
7 |
|
|
|
8 |
|
|
void
|
9 |
|
|
f (void)
|
10 |
|
|
{
|
11 |
|
|
int i = 0;
|
12 |
|
|
int a[n]; /* { dg-error "ISO C90 forbids variable length array" } */
|
13 |
|
|
enum e1 {
|
14 |
|
|
/* Integer constant expressions may not contain statement
|
15 |
|
|
expressions (not a permitted operand). */
|
16 |
|
|
E1 = (1 ? 0 : ({ 0; })), /* { dg-error "constant expression" } */
|
17 |
|
|
/* { dg-error "ISO C forbids braced-groups" "ISO" { target *-*-* } 16 } */
|
18 |
|
|
/* Real and imaginary parts act like other arithmetic
|
19 |
|
|
operators. */
|
20 |
|
|
E2 = __real__ (1 ? 0 : i++), /* { dg-error "constant expression" } */
|
21 |
|
|
E3 = __real__ 0,
|
22 |
|
|
E4 = __imag__ (1 ? 0 : i++), /* { dg-error "constant" } */
|
23 |
|
|
E5 = __imag__ 0,
|
24 |
|
|
/* __alignof__ always constant. */
|
25 |
|
|
E6 = __alignof__ (int[n]), /* { dg-error "ISO C90 forbids variable length array" } */
|
26 |
|
|
E7 = __alignof__ (a), /* { dg-error "__alignof__ \\(expression\\)" } */
|
27 |
|
|
/* __extension__ ignored for constant expression purposes. */
|
28 |
|
|
E8 = __extension__ (1 ? 0 : i++), /* { dg-error "constant expression" } */
|
29 |
|
|
E9 = __extension__ 0,
|
30 |
|
|
/* Conditional expressions with omitted arguments act like the
|
31 |
|
|
standard type. */
|
32 |
|
|
E10 = (1 ? : i++), /* { dg-error "constant expression" } */
|
33 |
|
|
/* { dg-error "ISO C forbids omitting" "ISO" { target *-*-* } 32 } */
|
34 |
|
|
E11 = (1 ? : 0) /* { dg-error "ISO C forbids omitting" } */
|
35 |
|
|
};
|
36 |
|
|
enum e2 {
|
37 |
|
|
/* Complex integer constants may be cast directly to integer
|
38 |
|
|
types, but not after further arithmetic on them. */
|
39 |
|
|
F1 = (int) (_Complex int) 2i, /* { dg-error "constant expression" } */
|
40 |
|
|
/* { dg-error "complex" "complex" { target *-*-* } 39 } */
|
41 |
|
|
/* { dg-error "imaginary" "imaginary" { target *-*-* } 39 } */
|
42 |
|
|
F2 = (int) +2i, /* { dg-error "constant expression" } */
|
43 |
|
|
/* { dg-error "imaginary" "ISO" { target *-*-* } 42 } */
|
44 |
|
|
F3 = (int) (1 + 2i), /* { dg-error "constant expression" } */
|
45 |
|
|
/* { dg-error "imaginary" "ISO" { target *-*-* } 44 } */
|
46 |
|
|
F4 = (int) 2i /* { dg-error "imaginary" } */
|
47 |
|
|
};
|
48 |
|
|
static double dr = __real__ (1.0 + 2.0i);
|
49 |
|
|
/* { dg-error "imaginary" "ISO" { target *-*-* } 48 } */
|
50 |
|
|
static double di = __imag__ (1.0 + 2.0i);
|
51 |
|
|
/* { dg-error "imaginary" "ISO" { target *-*-* } 50 } */
|
52 |
|
|
/* Statement expressions allowed in unevaluated subexpressions in
|
53 |
|
|
initializers in gnu99 but not gnu89. */
|
54 |
|
|
static int j = (1 ? 0 : ({ 0; })); /* { dg-error "constant expression" } */
|
55 |
|
|
/* { dg-error "braced" "ISO" { target *-*-* } 54 } */
|
56 |
|
|
}
|