llvm-project/clang/test/CodeGenCXX/devirtualize-virtual-functi...

48 lines
629 B
C++

// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
struct A {
virtual void f();
A h();
};
A g();
void f(A a, A *ap, A& ar) {
// This should not be a virtual function call.
// CHECK: call void @_ZN1A1fEv(%struct.A* %a)
a.f();
// CHECK: call void %
ap->f();
// CHECK: call void %
ar.f();
// CHECK: call void @_ZN1A1fEv
A().f();
// CHECK: call void @_ZN1A1fEv
g().f();
// CHECK: call void @_ZN1A1fEv
a.h().f();
}
struct B {
virtual void f();
~B();
B h();
};
void f() {
// CHECK: call void @_ZN1B1fEv
B().f();
// CHECK: call void @_ZN1B1fEv
B().h().f();
}