Bug 53516 - [4.6 Regression] Vectorization and memset recognition miscompile bitfield stores
Summary: [4.6 Regression] Vectorization and memset recognition miscompile bitfield stores
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.7.1
: P3 normal
Target Milestone: 4.7.1
Assignee: Richard Biener
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2012-05-29 13:11 UTC by Richard Biener
Modified: 2013-04-12 16:25 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work: 4.5.3, 4.7.1, 4.8.0
Known to fail: 4.6.3, 4.7.0
Last reconfirmed: 2012-05-29 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Biener 2012-05-29 13:11:50 UTC
The following is miscompiled at -O3.

extern void abort (void);

struct Foo
{
  char a : 1;
  char b : 7;
};

struct Foo x[256];
int y[256];

void __attribute__((noinline,noclone)) bar (int n)
{
  int i;
  for (i = 0; i < n; ++i)
    {
      x[i].a = 0;
      y[i] = 3;
    }
}

int main()
{
  x[5].b = 7;
  bar (256);
  if (x[5].b != 7)
    abort ();
  return 0;
}
Comment 1 Richard Biener 2012-05-29 13:13:42 UTC
4.5 works.
Comment 2 Richard Biener 2012-05-29 14:40:23 UTC
Author: rguenth
Date: Tue May 29 14:40:16 2012
New Revision: 187961

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187961
Log:
2012-05-29  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/53516
	* tree-data-ref.c (stmt_with_adjacent_zero_store_dr_p): Reject
	bitfield accesses.
	* tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.

	* gcc.dg/torture/pr53516.c: New testcase.

Added:
    trunk/gcc/testsuite/gcc.dg/torture/pr53516.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-data-ref.c
    trunk/gcc/tree-vect-data-refs.c
Comment 3 Richard Biener 2012-05-29 14:44:13 UTC
Author: rguenth
Date: Tue May 29 14:44:08 2012
New Revision: 187964

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187964
Log:
2012-05-29  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/53516
	* tree-data-ref.c (stmt_with_adjacent_zero_store_dr_p): Reject
	bitfield accesses.
	* tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.

	* gcc.dg/torture/pr53516.c: New testcase.

Added:
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr53516.c
Modified:
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_7-branch/gcc/tree-data-ref.c
    branches/gcc-4_7-branch/gcc/tree-vect-data-refs.c
Comment 4 Richard Biener 2012-05-29 14:44:50 UTC
Fixed on the trunk and the 4.7 branch for now.
Comment 5 Jakub Jelinek 2013-04-12 16:25:40 UTC
The 4.6 branch has been closed, fixed in GCC 4.7.1.