Files
Philip Craig c51252fb9b dwarf: function with multiple ranges (#17)
foo is split into foo and foo.cold, and thus has multiple symbols
and multiple address ranges.
2024-10-03 14:34:10 +10:00

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