/* { dg-do compile { target { nonpic } } } */
|
/* { dg-do compile { target { nonpic } } } */
|
/* { dg-options "-fipa-pta -fdump-ipa-pta" } */
|
/* { dg-options "-fipa-pta -fdump-ipa-pta" } */
|
/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
|
/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
|
|
|
struct X { char x; char y; };
|
struct X { char x; char y; };
|
|
|
char *q;
|
char *q;
|
|
|
static void __attribute__((noinline))
|
static void __attribute__((noinline))
|
bar (char *p)
|
bar (char *p)
|
{
|
{
|
q = p;
|
q = p;
|
}
|
}
|
|
|
void test1 (char a1, char b, char c, char d, char e, char f, char g, char h)
|
void test1 (char a1, char b, char c, char d, char e, char f, char g, char h)
|
{
|
{
|
char *p = &a1;
|
char *p = &a1;
|
p++;
|
p++;
|
bar (p);
|
bar (p);
|
}
|
}
|
|
|
void test2 (struct X a2, char b, char c, char d, char e, char f, char g, char h)
|
void test2 (struct X a2, char b, char c, char d, char e, char f, char g, char h)
|
{
|
{
|
char *p = &a2.x;
|
char *p = &a2.x;
|
p++;
|
p++;
|
bar (p);
|
bar (p);
|
}
|
}
|
|
|
void test3 (struct X a3, char b, char c, char d, char e, char f, char g, char h)
|
void test3 (struct X a3, char b, char c, char d, char e, char f, char g, char h)
|
{
|
{
|
char *p = &a3.y;
|
char *p = &a3.y;
|
bar (p);
|
bar (p);
|
}
|
}
|
|
|
void test4 (int a4, char b, char c, char d, char e, char f, char g, char h)
|
void test4 (int a4, char b, char c, char d, char e, char f, char g, char h)
|
{
|
{
|
char *p = (char *)&a4;
|
char *p = (char *)&a4;
|
p++;
|
p++;
|
p++;
|
p++;
|
p++;
|
p++;
|
p++;
|
p++;
|
bar (p);
|
bar (p);
|
}
|
}
|
|
|
/* { dg-final { scan-ipa-dump "bar.arg0 = { a4 a3\[^ \]* a2\[^ \]* a1 }" "pta" } } */
|
/* { dg-final { scan-ipa-dump "bar.arg0 = { a4 a3\[^ \]* a2\[^ \]* a1 }" "pta" } } */
|
/* { dg-final { cleanup-ipa-dump "pta" } } */
|
/* { dg-final { cleanup-ipa-dump "pta" } } */
|
|
|