This is a collection of things that test suites have
said were "wrong" with GCC--but that I don't agree with.

First, test suites sometimes test for compatibility with
traditional C.  GCC with -traditional is not completely
compatible with traditional C, and in some ways I think it
should not be.

* K&R C allowed \x to appear in a string literal (or character
literal?)  even in cases where it is *not* followed by a sequence of
hex digits.  I'm not convinced this is desirable.

* K&R compilers allow comments to cross over an inclusion boundary (i.e.
started in an include file and ended in the including file).
I think this would be quite ugly and can't imagine it could
be needed.

Sometimes tests disagree with GCC's interpretation of the ANSI standard.

* One test claims that this function should return 1.

    enum {A, B} foo;

    func (enum {B, A} arg)
    {
      return B;
    }

I think it should return 0, because the definition of B that
applies is the one in func.

* Some tests report failure when the compiler does not produce
an error message for a certain program.

ANSI C requires a "diagnostic" message for certain kinds of invalid
programs, but a warning counts as a diagnostic.  If GCC produces
a warning but not an error, that is correct ANSI support.
When test suites call this "failure", the tests are broken.

