blob: 3f7c7a0bd48cc2664debfd1773dddb4f05315d03 [file] [edit]
// RUN: %clang_cc1 -triple x86_64-unknown-linux -fexperimental-call-graph-section -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s
// Check that we generate callee_type metadata for indirect calls
// to functions with internal linkage (e.g., types in anonymous namespaces),
// using the generalized type metadata form.
namespace {
class a;
class b {
public:
virtual void c(a);
};
class a {
public:
b &e;
void d() { e.c(*this); }
};
void b::c(a) {}
void f() {
a *g = nullptr;
g->d();
}
} // namespace
void test() {
f();
}
// CHECK-LABEL: define {{.*}} void @{{.*}}1a1dEv
// CHECK: %[[VFN:.*]] = getelementptr inbounds ptr, ptr %{{.*}}, i{{[0-9]+}} 0
// CHECK: %[[FP:.*]] = load ptr, ptr %[[VFN]], align {{[0-9]+}}
// CHECK: call void %[[FP]]({{.*}}), !callee_type [[HEX_TYPE:![0-9]+]]
// CHECK: ret void
// CHECK: [[HEX_TYPE]] = !{[[HEX_TYPE_INNER:![0-9]+]]}
// CHECK: [[HEX_TYPE_INNER]] = !{!"_ZTSFvN12_GLOBAL__N_11aEE"}