[comp.lang.c++] cfront 2.0 bug 900322_01

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; }