This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [RFA:] Fix invalid tests (was: Re: Tests gcc.dg/c99-scope-2.c ...)
- To: hp at bitrange dot com
- Subject: Re: [RFA:] Fix invalid tests (was: Re: Tests gcc.dg/c99-scope-2.c ...)
- From: Geoff Keating <geoffk at geoffk dot org>
- Date: Tue, 31 Jul 2001 10:26:05 -0700
- CC: gcc at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- References: <Pine.BSF.4.30.0107301823220.42592-100000@dair.pair.com>
- Reply-to: Geoff Keating <geoffk at redhat dot com>
> Date: Mon, 30 Jul 2001 18:29:06 -0400 (EDT)
> From: Hans-Peter Nilsson <hp@bitrange.com>
> cc: <gcc@gcc.gnu.org>, <gcc-patches@gcc.gnu.org>
> X-OriginalArrivalTime: 30 Jul 2001 22:29:07.0760 (UTC) FILETIME=[0BFD3300:01C11947]
>
> On 30 Jul 2001, Geoff Keating wrote:
> > A compiler is less useful if
> >
> > struct { char a[4]; }
> >
> > does not have size 4, as it makes it hard to implement certain styles
> > of file and network I/O.
>
> That kind of code is usually non-portable anyway, so it could be
> somewhat solved by attribute packed, but on the other hand
> that'd still have problems with a large base of existing code.
It is not always unportable---the most common case is across multiple
compilers that all support the same OS.
> > If the tests fail for your port because of this, it's better to submit
> > a patch to fix them (make it '<=' and '>=' respectively), unless you'd
> > rather change your port to remove the excess padding.
>
> To keep the story short, as I said there was no reason for the
> port having the alignment that was making the tests fail, so I'm
> changing that. But let's also change the tests for the future.
>
> I thought of changing ints to longs, but rethought that as being
> excessive.
>
> This passes, tested with and without the excessive alignment on
> the new port. I hope the original intention is not munged. I
> think the align-1 test was checking a bug that "contaminated"
> the type typedef:d from with the alignment attribute.
>
> Ok to commit?
>
> gcc/testsuite:
>
> * gcc.dg/c99-scope-2.c: Don't generally assume adding more
> largest-type elements to a struct makes its size grow.
>
> * gcc.c-torture/execute/align-1.c: Compare size against size of
> another struct, not against sizeof int.
You only sent the patch for c99-scope-2; that part is OK.
>
> Index: c99-scope-2.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/c99-scope-2.c,v
> retrieving revision 1.1
> diff -p -c -u -p -r1.1 c99-scope-2.c
> cvs server: conflicting specifications of output style
> --- c99-scope-2.c 2000/11/13 14:08:09 1.1
> +++ c99-scope-2.c 2001/07/30 21:04:49
> @@ -14,58 +14,58 @@ main (void)
> a = sizeof (struct foo);
> if (b = sizeof (struct foo { int i0; int i1; }))
> c = sizeof (struct foo { int i0; int i1; int i2; });
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> if ((b = sizeof (struct foo { int i0; int i1; })), 0)
> c = sizeof (struct foo { int i0; int i1; int i2; });
> else
> d = sizeof (struct foo { int i0; int i1; int i2; int i3; });
> - if (!(a < b && b < d))
> + if (!(a <= b && b <= d))
> abort ();
> switch (b = sizeof (struct foo { int i0; int i1; }))
> default:
> c = sizeof (struct foo { int i0; int i1; int i2; });
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> do
> c = sizeof (struct foo { int i0; int i1; int i2; });
> while ((b = sizeof (struct foo { int i0; int i1; })), 0);
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> d = 1;
> while ((b = sizeof (struct foo { int i0; int i1; })), d)
> (c = sizeof (struct foo { int i0; int i1; int i2; })), d--;
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> d = 1;
> for ((b = sizeof (struct foo { int i0; int i1; })); d; d--)
> c = sizeof (struct foo { int i0; int i1; int i2; });
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> d = 1;
> for ((b = sizeof (struct foo { int i0; int i1; })); d; d--)
> c = sizeof (struct foo);
> - if (!(a < b && b == c))
> + if (!(a <= b && b == c))
> abort ();
> d = 1;
> for (; (b = sizeof (struct foo { int i0; int i1; })), d; d--)
> c = sizeof (struct foo { int i0; int i1; int i2; });
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> d = 1;
> for (; (b = sizeof (struct foo { int i0; int i1; })), d; d--)
> c = sizeof (struct foo);
> - if (!(a < b && b == c))
> + if (!(a <= b && b == c))
> abort ();
> d = 1;
> for (; d; (b = sizeof (struct foo { int i0; int i1; })), d--)
> c = sizeof (struct foo { int i0; int i1; int i2; });
> - if (!(a < b && b < c))
> + if (!(a <= b && b <= c))
> abort ();
> d = 1;
> for (; d; (b = sizeof (struct foo { int i0; int i1; })), d--)
> c = sizeof (struct foo);
> - if (!(a < b && b == c))
> + if (!(a <= b && b == c))
> abort ();
> exit (0);
> }
>
> brgds, H-P
>
--
- Geoffrey Keating <geoffk@geoffk.org>