You've already forked object-testfiles
mirror of
https://github.com/encounter/object-testfiles.git
synced 2026-03-30 11:32:26 -07:00
c51252fb9b
foo is split into foo and foo.cold, and thus has multiple symbols and multiple address ranges.
41 lines
701 B
C++
41 lines
701 B
C++
/* Based on gcc/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c */
|
|
/* foo is split into foo and foo.cold. bar is inlined in both cases. */
|
|
|
|
#define MAXITER 10000
|
|
#define SIZE 10000
|
|
|
|
const char *sarr[SIZE];
|
|
const char *buf_hot;
|
|
const char *buf_cold;
|
|
|
|
struct Foo
|
|
{
|
|
int a;
|
|
void foo(int path);
|
|
void bar(const char *s);
|
|
};
|
|
|
|
void Foo::bar(const char *s) {
|
|
int i;
|
|
for (i = 0; i < SIZE; i++)
|
|
sarr[i] = s;
|
|
}
|
|
|
|
__attribute__((noinline))
|
|
void Foo::foo(int path) {
|
|
if (path)
|
|
bar(buf_hot);
|
|
else
|
|
bar(buf_cold);
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
Foo foo = {};
|
|
int i;
|
|
buf_hot = "hello";
|
|
buf_cold = "world";
|
|
for (i = 0; i < MAXITER; i++)
|
|
foo.foo(argc);
|
|
return 0;
|
|
}
|