[Bug middle-end/34921] Misalign stack variable referenced by nested function
Joey dot ye at intel dot com
gcc-bugzilla@gcc.gnu.org
Wed Jan 23 02:12:00 GMT 2008
------- Comment #5 from Joey dot ye at intel dot com 2008-01-23 01:45 -------
(In reply to comment #2)
> I bet if you put jj in struct and don't have a nested function, this will be
> the same issue.
Not the same. In fact it passes if not referenced by a nested function. The
root is in tree-nested.c
$ cat nested-3.c
#include <stdio.h>
#include <stdlib.h>
typedef int aligned __attribute__((aligned(16)));
int global;
void
check (int *i)
{
*i = 20;
if ((((int) i) & (__alignof__(aligned) - 1)) != 0)
{
printf("\nUnalign address (%d): %p!\n",
__alignof__(aligned), i);
abort ();
}
}
void
foo (void)
{
aligned jj;
int j2;
void bar ()
{
j2 = -20;
}
jj = 0;
bar ();
check (&jj);
}
int
main()
{
foo ();
return 0;
}
$ diff -p nested-2.c nested-3.c
*** nested-2.c 2008-01-22 14:24:39.000000000 +0800
--- nested-3.c 2008-01-23 09:38:47.000000000 +0800
*************** void
*** 19,27 ****
foo (void)
{
aligned jj;
void bar ()
{
! jj = -20;
}
jj = 0;
bar ();
--- 19,28 ----
foo (void)
{
aligned jj;
+ int j2;
void bar ()
{
! j2 = -20;
}
jj = 0;
bar ();
$ gcc -m32 -o nested-3.exe nested-3.c
$ ./nested-3.exe
$
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34921
More information about the Gcc-bugs
mailing list