/* { dg-do run } */ /* { dg-options "-O3" } */ /* Check that "m" array references are effective in preventing the array initialization from wandering past a use in the asm, and that the casts remain supported. */ static int f1 (const char *p) { int count; __asm__ ("repne scasb" : "=c" (count), "+D" (p) : "m" (*(const char (*)[]) p), "0" (-1), "a" (0)); return -2 - count; } static int f2 (const char *p) { int count; __asm__ ("repne scasb" : "=c" (count), "+D" (p) : "m" (*(const char (*)[48]) p), "0" (-1), "a" (0)); return -2 - count; } static int f3 (int n, const char *p) { int count; __asm__ ("repne scasb" : "=c" (count), "+D" (p) : "m" (*(const char (*)[n]) p), "0" (-1), "a" (0)); return -2 - count; } int main () { int a; char buff[48] = "hello world"; buff[4] = 0; a = f1 (buff); if (a != 4) __builtin_abort (); buff[4] = 'o'; a = f2 (buff); if (a != 11) __builtin_abort (); buff[4] = 0; a = f3 (48, buff); if (a != 4) __builtin_abort (); return 0; }