On Mon, Oct 21, 2013 at 9:39 PM, Mike Stump <mikest...@comcast.net> wrote:
> Concerning:
>
> 2008-11-20  Richard Guenther  <rguent...@suse.de>
>
>         PR tree-optimization/37868
>         * gcc.dg/torture/pr37868.c: New testcase.
>         * gcc.c-torture/execute/pr38048-1.c: Likewise.
>         * gcc.c-torture/execute/pr38048-2.c: Likewise.
>
> So, is there any reason why we can't make the test case portable as in the 
> below instead of skipping on all the targets that blow on misaligned data?
>
> Ok?

Clearly this was an alias analysis fix so adding a union may no longer
trigger the failure mode.  Please make sure to go back in time
where the testcase failed and see if your adjusted testcase fails _in
the same way_.  Note that you don't adjust the dg-skip-if in your
patch and note
that actually there should be no unaligned accesses performed if you
instead do

typedef unsigned int unaligned_uint __attribute__((aligned(1)));
...
     bad_bits = ((unsigned int)-1) ^ *(1+(unaligned_uint *) &x);

but double-check this adjusted testcase still fails without the fix.

Richard.

> diff --git a/gcc/testsuite/gcc.dg/torture/pr37868.c 
> b/gcc/testsuite/gcc.dg/torture/pr37868.c
> index 380b089..b7ff43f 100644
> --- a/gcc/testsuite/gcc.dg/torture/pr37868.c
> +++ b/gcc/testsuite/gcc.dg/torture/pr37868.c
> @@ -24,15 +24,18 @@ struct X {
>
>  int main (void)
>  {
> -  struct X x;
> +  union {
> +    struct X x;
> +    unsigned int i;
> +  } s;
>    unsigned int bad_bits;
>
> -  x.pad = -1;
> -  x.a = -1;
> -  x.b = -1;
> -  x.c = -1;
> +  s.x.pad = -1;
> +  s.x.a = -1;
> +  s.x.b = -1;
> +  s.x.c = -1;
>
> -  bad_bits = ((unsigned int)-1) ^ *(1+(unsigned int *) &x);
> +  bad_bits = ((unsigned int)-1) ^ *(1+(unsigned int *) &s.x);
>    if (bad_bits != 0)
>      abort ();
>    return 0;
>
  • pr37868 Mike Stump
    • Re: pr37868 Richard Biener

Reply via email to