Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
cfe/trunk/test/CodeGenCXX/skip-vtable-pointer-initialization.cpp
Show All 21 Lines | |||||
// Check that we do initialize the vtable pointer in A::~A() since the destructor body isn't trivial. | // Check that we do initialize the vtable pointer in A::~A() since the destructor body isn't trivial. | ||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test21AD2Ev | // CHECK-LABEL: define void @_ZN5Test21AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test21AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test21AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() { | A::~A() { | ||||
f(); | f(); | ||||
} | } | ||||
} | } | ||||
namespace Test3 { | namespace Test3 { | ||||
// Check that we don't initialize the vtable pointer in A::~A(), since the destructor body is trivial | // Check that we don't initialize the vtable pointer in A::~A(), since the destructor body is trivial | ||||
// and Field's destructor body is also trivial. | // and Field's destructor body is also trivial. | ||||
struct Field { | struct Field { | ||||
~Field() { } | ~Field() { } | ||||
}; | }; | ||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test31AD2Ev | // CHECK-LABEL: define void @_ZN5Test31AD2Ev | ||||
// CHECK-NOT: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test31AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK-NOT: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test31AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() { | A::~A() { | ||||
} | } | ||||
} | } | ||||
namespace Test4 { | namespace Test4 { | ||||
Show All 9 Lines | |||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test41AD2Ev | // CHECK-LABEL: define void @_ZN5Test41AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test41AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test41AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() | A::~A() | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
namespace Test5 { | namespace Test5 { | ||||
// Check that we do initialize the vtable pointer in A::~A(), since Field's destructor isn't | // Check that we do initialize the vtable pointer in A::~A(), since Field's destructor isn't | ||||
// available in this translation unit. | // available in this translation unit. | ||||
struct Field { | struct Field { | ||||
~Field(); | ~Field(); | ||||
}; | }; | ||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test51AD2Ev | // CHECK-LABEL: define void @_ZN5Test51AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test51AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test51AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() | A::~A() | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
namespace Test6 { | namespace Test6 { | ||||
Show All 11 Lines | |||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test61AD2Ev | // CHECK-LABEL: define void @_ZN5Test61AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test61AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test61AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() | A::~A() | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
namespace Test7 { | namespace Test7 { | ||||
Show All 9 Lines | |||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test71AD2Ev | // CHECK-LABEL: define void @_ZN5Test71AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test71AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test71AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() | A::~A() | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
namespace Test8 { | namespace Test8 { | ||||
Show All 9 Lines | |||||
struct A { | struct A { | ||||
virtual void f(); | virtual void f(); | ||||
~A(); | ~A(); | ||||
Field field; | Field field; | ||||
}; | }; | ||||
// CHECK-LABEL: define void @_ZN5Test81AD2Ev | // CHECK-LABEL: define void @_ZN5Test81AD2Ev | ||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test81AE, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5Test81AE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** | ||||
A::~A() | A::~A() | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
namespace Test9 { | namespace Test9 { | ||||
Show All 9 Lines |