------- 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

Reply via email to