/* PR middle-end/20297 */
|
/* PR middle-end/20297 */
|
/* The memcpy FUNCTION_DECL built in the middle-end for block moves got
|
/* The memcpy FUNCTION_DECL built in the middle-end for block moves got
|
hidden visibility from the first push, so the call didn't use the PLT. */
|
hidden visibility from the first push, so the call didn't use the PLT. */
|
|
|
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
|
/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
|
/* { dg-require-visibility "" } */
|
/* { dg-require-visibility "" } */
|
/* { dg-options "-Os -fpic" } */
|
/* { dg-options "-Os -fpic" } */
|
/* { dg-final { scan-assembler "memcpy@PLT" } } */
|
/* { dg-final { scan-assembler "memcpy@PLT" } } */
|
|
|
#pragma GCC visibility push(hidden)
|
#pragma GCC visibility push(hidden)
|
#pragma GCC visibility push(default)
|
#pragma GCC visibility push(default)
|
extern void* memcpy (void *, const void *, __SIZE_TYPE__);
|
extern void* memcpy (void *, const void *, __SIZE_TYPE__);
|
#pragma GCC visibility pop
|
#pragma GCC visibility pop
|
|
|
struct a { int a[1024]; };
|
struct a { int a[1024]; };
|
|
|
extern void *bar (struct a *, struct a *, int);
|
extern void *bar (struct a *, struct a *, int);
|
|
|
void *
|
void *
|
foo (struct a *a, struct a *b, int c)
|
foo (struct a *a, struct a *b, int c)
|
{
|
{
|
struct a cc = *b;
|
struct a cc = *b;
|
return bar (a, &cc, 4 * c);
|
return bar (a, &cc, 4 * c);
|
}
|
}
|
|
|