rfg@paris.ics.uci.edu (Ronald Guilmette) (03/24/90)
// cfront 2.0 bug 900322_01 // The ANSI C standard, in section 3.1.2.5 (first paragraph) differentiates // types into three disjoint sets, i.e object types, function types, and // incomplete types. // Also in 3.1.2.5 (page 24) the standard says that the element type of // an array type is an object type. // Later in that same section the standard also notes that array types with // unknown size are considered incomplete types (page 25). (Struct & union // types which have only been "forward declared" are also incomplete types.) // Some experts infer this to mean that it is not legal to specify or to // construct an array *type* whose element type is an incomplete type. // This interpretation suggests that the statements indicated below contain // errors. // cfront fails to flag all of the indicated statements with errors. extern int extern_two_d [] []; /* ERROR - caught by cfront */ int tenative_two_d [] []; /* ERROR - caught by cfront */ static int static_two_d [] []; /* ERROR - caught by cfront */ int (*pointer_to_two_d)[][]; /* ERROR - caught by cfront */ void function_0 (int arg [] []) { /* ERROR - caught by cfront */ } typedef int int_one_d_type []; typedef int_one_d_type int_two_d_type[];/* ERROR - caught by cfront */ struct s; extern struct s extern_s_array [10]; /* ERROR */ struct s tenative_s_array [10]; /* ERROR - caught by cfront */ static struct s static_s_array [10]; /* ERROR - caught by cfront */ struct s (*pointer_to_s_array) []; /* ERROR */ void function_1 (struct s arg []) { /* ERROR - caught by cfront */ } typedef struct s s_type; typedef s_type s_one_d_type [10]; /* ERROR */ int main () { return 0; }