Reduced from combine.c, fails if compiled with "-O1 -mtune=k8", doesn't fail with "-O1 -mtune=generic". possibly introduced between r119211 and r119769 (not sure about this).
// -------------------8<------------------------------------------------------- extern void *memset (void *, int, unsigned long); extern void abort (void); struct reg_stat { void *last_death; void *last_set; void *last_set_value; int last_set_label; char last_set_sign_bit_copies; int last_set_mode : 8; char last_set_invalid; char sign_bit_copies; long nonzero_bits; }; static struct reg_stat *reg_stat; void __attribute__((noinline)) init_reg_last (void) { memset (reg_stat, 0, __builtin_offsetof (struct reg_stat, sign_bit_copies)); } int main (void) { struct reg_stat r; reg_stat = &r; r.nonzero_bits = -1; init_reg_last (); if (r.nonzero_bits != -1) abort (); return 0; } // ------------------->8------------------------------------------------------- -- Summary: [4.3 Regression] invalid code generation for memset() with -mtune=k8 Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: belyshev at depni dot sinp dot msu dot ru GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30778