[gnu.gcc.bug] Gcc 1.30 bugs

ka@PLOVER.CS.WASHINGTON.EDU (Kenneth Almquist) (01/22/89)

BUG 1:

    Gcc 1.30 dies without printing an error message when it encounters
    certain syntax errors in global declarations.

Reproduce by:

    Compile the following code with the -S option:

	int x;
	volitile int y;
	int z;

    The .s file produced is:

	#NO_APP
	.comm _x,4

    Note that the first token of the second line of the input file is
    an identifier, not a keyword.  Correcting the spelling to "volatile"
    causes the compiler to generate code for all three declarations.


BUG 2:

    Gcc 1.30 doesn't handle forward references to structure tags in
    function prototypes correctly.  (I don't have a copy of the draft
    standard, but I assume such forward references are legal.)

Reproduce by:

    Compile the following code:

	int f(struct s *);

	struct s {
		int i;
	};

	int f(p)
		struct s *p;
		{
		return p->i;
	}

    Gcc produces the following error message:

	bug2.c: In function f:
	bug2.c:9: argument `p' doesn't match function prototype

    Placing the function prototype for "f" after the declaration of "s"
    rather than before it causes the error message to disappear.


Bug 3:

    Gcc 1.30 doesn't understand definitions of static functions within
    an inner scope.

Reproduce by:

    Compile the following code:

	int f() {
		static int g(void);
		return g();
	}

	static int g() {
		return 5;
	}

    Gcc produces the following error message:

	bug3.c: In function g:
	bug3.c:6: warning: `g' was declared `extern' and later `static'

    Placing the function prototype for g before the function f rather
    than within it causes the error message to disappear.


Despite these problems, it's a great compiler.
				Kenneth Almquist