------- Comment #3 from rguenth at gcc dot gnu dot org 2008-02-20 09:43 ------- This would be an executable testcase:
extern void *memcpy (void *, const void *, __SIZE_TYPE__); extern int memcmp(const void *s1, const void *s2, __SIZE_TYPE__ n); extern void abort(void); char string1[9] = "1234"; char string2[9] = "1234"; void bar (void) { unsigned int temp; char *p = &string1[2]; memcpy (&temp, &string1[1], 4); memcpy (p, &temp, 4); string1[1] = '.'; } int main() { bar(); if (memcmp (string1, "1.234", 5) != 0) abort (); return 0; } which I can confirm aborts on s390 but not x86_64. bar looks like bar: .LFB2: st %r15,60(%r15) .LCFI0: larl %r5,.L3 ahi %r15,-104 .LCFI1: larl %r1,string1+2 l %r2,.L4-.L3(%r5) mvc 0(4,%r1),0(%r2) larl %r1,string1 mvi 1(%r1),46 l %r15,164(%r15) br %r14 -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |wrong-code Last reconfirmed|0000-00-00 00:00:00 |2008-02-20 09:43:54 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35258