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>