diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2009-03-27 22:37:39 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-03-27 15:37:39 -0700 |
commit | 2ac26e152e6ee91698ddd752d3ec788ead9c90df (patch) | |
tree | cbedb3f56b939f163e28dad691890cef4b42f791 /gcc/cfgexpand.c | |
parent | 472c7fbd0979129313e49c2fb73ff5b36d4b1d57 (diff) | |
download | gcc-2ac26e152e6ee91698ddd752d3ec788ead9c90df.zip gcc-2ac26e152e6ee91698ddd752d3ec788ead9c90df.tar.gz gcc-2ac26e152e6ee91698ddd752d3ec788ead9c90df.tar.bz2 |
re PR middle-end/39315 (Unaligned move used on aligned stack variable)
gcc/
2009-03-27 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/39315
* cfgexpand.c (expand_one_stack_var_at): Change alignment
limit to MAX_SUPPORTED_STACK_ALIGNMENT.
gcc/testsuite/
2009-03-27 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/39315
* gcc.target/i386/pr39315-1.c: New.
* gcc.target/i386/pr39315-2.c: Likewise.
* gcc.target/i386/pr39315-3.c: Likewise.
* gcc.target/i386/pr39315-4.c: Likewise.
* gcc.target/i386/pr39315-check.c: Likewise.
From-SVN: r145138
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r-- | gcc/cfgexpand.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 4bfdc5f..695e4ef 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -866,7 +866,8 @@ dump_stack_var_partition (void) static void expand_one_stack_var_at (tree decl, HOST_WIDE_INT offset) { - HOST_WIDE_INT align; + /* Alignment is unsigned. */ + unsigned HOST_WIDE_INT align; rtx x; /* If this fails, we've overflowed the stack frame. Error nicely? */ @@ -879,8 +880,10 @@ expand_one_stack_var_at (tree decl, HOST_WIDE_INT offset) offset -= frame_phase; align = offset & -offset; align *= BITS_PER_UNIT; - if (align > STACK_BOUNDARY || align == 0) + if (align == 0) align = STACK_BOUNDARY; + else if (align > MAX_SUPPORTED_STACK_ALIGNMENT) + align = MAX_SUPPORTED_STACK_ALIGNMENT; DECL_ALIGN (decl) = align; DECL_USER_ALIGN (decl) = 0; |