OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.old-deja/] [g++.bugs/] [900322_01.C] - Blame information for rev 699

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 699 jeremybenn
// { dg-do assemble  }
2
// g++ 1.37.1 bug 900322_01
3
 
4
// ** Old, obsolete commentary:
5
// **************************************************************************
6
// The ANSI C standard, in section 3.1.2.5 (first paragraph) differentiates
7
// types into three disjoint sets, i.e object types, function types, and
8
// incomplete types.
9
 
10
// Also in 3.1.2.5 (page 24) the standard says that the element type of
11
// an array type is an object type.
12
 
13
// Later in that same section the standard also notes that array types with
14
// unknown size are considered incomplete types (page 25).  (Struct & union
15
// types which have only been "forward declared" are also incomplete types.)
16
 
17
// Some experts infer this to mean that it is not legal to specify or to
18
// construct an array *type* whose element type is an incomplete type.
19
 
20
// This interpretation suggests that the statements indicated below contain
21
// errors.
22
 
23
// g++ fails to flag all of the indicated statements with errors (even when
24
// the -pedantic option is used).
25
// **************************************************************************
26
 
27
// The above commentary is wrong.  (jason 1998/11/13)
28
// In fact, the lines marked OK are well-formed; the prohibition is only
29
// against forming array types with multiple unknown bounds.  This prohibition
30
// is found in 8.3.4 [dcl.array].
31
 
32
// It is also ill-formed to create an object of incomplete type.
33
 
34
// keywords: incomplete types, arrays, element types
35
 
36
extern int extern_two_d [] [];          // { dg-error "" } invalid declaration
37
int tenative_two_d [] [];               // { dg-error "" } caught by g++
38
static int static_two_d [] [];          // { dg-error "" } caught by g++
39
 
40
int (*pointer_to_two_d)[][];            // { dg-error "" } invalid declaration
41
 
42
void function_0 (int arg [] []) {       // { dg-error "" } invalid declaration
43
}
44
 
45
typedef int int_one_d_type [];
46
typedef int_one_d_type int_two_d_type[];// { dg-error "" } invalid declaration
47
 
48
struct s;
49
 
50
extern struct s extern_s_array [10];    // OK
51
struct s tenative_s_array [10];         // { dg-error "" } object with incomplete type
52
static struct s static_s_array [10];    // { dg-error "" } object with incomplete type
53
 
54
struct s (*pointer_to_s_array) [];      // OK
55
 
56
void function_1 (struct s arg []) {     // OK
57
}
58
 
59
typedef struct s s_type;
60
typedef s_type s_one_d_type [10];       // OK
61
 
62
int main () { return 0; }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.