On 2006-11-12 17:00, Ruslan Ermilov <ru_at_freebsd.org> wrote: > > /src/lib/libelf/elf_rand.c: In function `elf_rand': > > /src/lib/libelf/elf_rand.c:47: warning: cast increases required alignment 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.) 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: char ch[] = "\x00\x00\x00\x00"; char *p = &(ch[0]); unsigned long *lptr = (unsigned long *)p; 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. On 2006-11-12 15:27, Stefan Farfeleder <stefan_at_fafoe.narf.at> wrote: > What is sizeof(struct foo)? If it's > 1 it makes sense. Exactly :)Received on Sun Nov 12 2006 - 13:43:12 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:02 UTC