[PATCH] Fix PR48493

Mike Stump mikestump@comcast.net
Thu Aug 8 23:29:00 GMT 2013


In the below, the test case tries to write to the stack outside the bounds of the s variable?  I can't imagine any good coming from this, and indeed, would be nice for the compiler to complain about such code.  If S had a few more bytes at the end, at least the code would not be wildly bad.

Thoughts?

On May 31, 2012, at 3:59 AM, Richard Guenther <rguenther@suse.de> wrote:
> This fixes PR48493 by backporting a one-liner - we should not go
> the movmisalign path for destinations that are not memory.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu and on
> mips by Andrew, installed.
> 
> Richard.
> 
> 2012-05-31  Richard Guenther  <rguenther@suse.de>
> 
> 	PR middle-end/48493
> 	* expr.c (expand_assignment): Do not use movmisalign on
> 	non-memory.
> 
> 	* gcc.dg/torture/pr48493.c: New testcase.

> Index: gcc/testsuite/gcc.dg/torture/pr48493.c
> ===================================================================
> *** gcc/testsuite/gcc.dg/torture/pr48493.c	(revision 0)
> --- gcc/testsuite/gcc.dg/torture/pr48493.c	(revision 0)
> ***************
> *** 0 ****
> --- 1,18 ----
> + /* { dg-do compile } */
> + 
> + typedef long long T __attribute__((may_alias, aligned (1)));
> + 
> + struct S
> + {
> +   _Complex float d __attribute__((aligned (8)));
> + };
> + 
> + void bar (struct S);
> + 
> + void
> + f1 (T x)
> + {
> +   struct S s;
> +   *(T *) ((char *) &s.d + 1) = x;
> +   bar (s);
> + }



More information about the Gcc-patches mailing list