Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Nov 2006 17:51:51 +0300
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        Giorgos Keramidas <keramida@FreeBSD.org>
Cc:        arm@FreeBSD.org, current@FreeBSD.org
Subject:   Re: [head tinderbox] failure on arm/arm
Message-ID:  <20061112145151.GC49703@rambler-co.ru>
In-Reply-To: <20061112144230.GC2331@kobe.laptop>
References:  <20061112133929.9194773068@freebsd-current.sentex.ca> <20061112140010.GA47660@rambler-co.ru> <20061112142710.GE91556@wombat.fafoe.narf.at> <20061112133929.9194773068@freebsd-current.sentex.ca> <20061112140010.GA47660@rambler-co.ru> <20061112144230.GC2331@kobe.laptop>

next in thread | previous in thread | raw e-mail | index | archive | help

--ABTtc+pdwF7KHXCz
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, Nov 12, 2006 at 03:42:30PM +0100, Giorgos Keramidas wrote:
> On 2006-11-12 17:00, Ruslan Ermilov <ru@freebsd.org> wrote:
> > > /src/lib/libelf/elf_rand.c: In function `elf_rand':
> > > /src/lib/libelf/elf_rand.c:47: warning: cast increases required align=
ment of target type
> > > *** Error code 1
> > >
> > > Stop in /src/lib/libelf.
> > > *** Error code 1
> >
> > This looks like a GCC bug to me.  The following code snippet,
> > when compiled on FreeBSD/arm, causes a -Wcast-align warning
> > which doesn't look right:
> >
> > %%%
> > $ cat a.c
> > struct foo {
> > 	char x;
> > };
> >
> > struct foo *
> > bubu(char *s)
> > {
> >
> > 	return (struct foo *)s;
> > }
> > $ cc -c -Wcast-align a.c
> > a.c: In function `bubu':
> > a.c:9: warning: cast increases required alignment of target type
> > %%%
> >
> > (None of other supported architecutes see the issue here.)
>=20
> You can't cast any random (char *) pointer to a pointer of a type which
> is (potentially) larger than 1 byte.  It's the same sort of warning you
> will get if you try to:
>=20
>     char ch[] =3D "\x00\x00\x00\x00";
>     char *p =3D &(ch[0]);
>     unsigned long *lptr =3D (unsigned long *)p;
>=20
> You cannot guarantee that `ch' is stored in an address that is properly
> aligned for (unsigned long), and this is what GCC warns about here.
>=20
No, your example I perfectly understand but it is completely different.
Note that the first (and only) member in my structure is "char", so it
doesn't need to be more than sizeof(char) aligned.

> On 2006-11-12 15:27, Stefan Farfeleder <stefan@fafoe.narf.at> wrote:
> > What is sizeof(struct foo)?  If it's > 1 it makes sense.
>=20
> Exactly :)
>=20
Still doesn't make much sense to me.  If all structure members are chars
(like is the case with "struct ar_hdr" from <ar.h> which GCC complains
about, and in my example, the required alignment shouldn't be more than
sizeof(char).  What am I missing?


Cheers,
--=20
Ruslan Ermilov
ru@FreeBSD.org
FreeBSD committer

--ABTtc+pdwF7KHXCz
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (FreeBSD)

iD8DBQFFVzUHqRfpzJluFF4RAk/2AJ4/N4i6u2+Zz/RRzNDStRX76CV2fgCfXLiX
RuNsL3WxU6JxtoI7ZX+Oi34=
=Ibh/
-----END PGP SIGNATURE-----

--ABTtc+pdwF7KHXCz--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061112145151.GC49703>