This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/24178] GCC 4.0/4.1 generates code that produces unaligned access exceptions
- From: "falk at debian dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Oct 2005 07:32:44 -0000
- Subject: [Bug middle-end/24178] GCC 4.0/4.1 generates code that produces unaligned access exceptions
- References: <bug-24178-3055@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from falk at debian dot org 2005-10-04 07:32 -------
(In reply to comment #3)
> Correct me if I wrong, but loading long from passed pointer to char minus 4
> is not correct too.
You are right, I misread the example, the pointer that is cast to Foo* is
actually correctly aligned. Here is a slightly clearer test case:
typedef struct {
long l;
char p4;
} Foo;
void foo(char *fn) {
Foo *p = (Foo *) (fn - 9);
p->p4 = 1;
}
int main(int argc, char **argv)
{
#if defined(__alpha__) && defined(__linux__)
# include <asm/sysinfo.h>
# include <asm/unistd.h>
syscall(__NR_osf_setsysinfo, SSI_NVPAIRS,
(int[]){SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT}, 1, 0, 0, 0);
#endif
Foo p;
foo(((char *) &p) + 9);
return 0;
}
This is very similar to a gcc 3.3 bug that disappeared in 3.4:
http://bugs.debian.org/301983
--
falk at debian dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24178