[lldb] Add a test for CRTP
This commit is contained in:
parent
7fd6f40dbd
commit
4019699fa5
|
@ -0,0 +1,3 @@
|
||||||
|
CXX_SOURCES := main.cpp
|
||||||
|
|
||||||
|
include Makefile.rules
|
|
@ -0,0 +1,36 @@
|
||||||
|
"""
|
||||||
|
A test for the curiously recurring template pattern (or CRTP).
|
||||||
|
|
||||||
|
Note that the derived class is referenced directly from the parent class in the
|
||||||
|
test. If this fails then there is a good chance that LLDB tried to eagerly
|
||||||
|
resolve the definition of the derived class while constructing the base class.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import lldb
|
||||||
|
from lldbsuite.test.decorators import *
|
||||||
|
from lldbsuite.test.lldbtest import *
|
||||||
|
from lldbsuite.test import lldbutil
|
||||||
|
|
||||||
|
|
||||||
|
class TestCase(TestBase):
|
||||||
|
|
||||||
|
mydir = TestBase.compute_mydir(__file__)
|
||||||
|
|
||||||
|
@no_debug_info_test
|
||||||
|
def test(self):
|
||||||
|
self.build()
|
||||||
|
self.createTestTarget()
|
||||||
|
|
||||||
|
# Try using the class in the expression evaluator.
|
||||||
|
self.expect_expr(
|
||||||
|
"derived",
|
||||||
|
result_type="Derived",
|
||||||
|
result_children=[
|
||||||
|
ValueCheck(name="Base<Derived>"),
|
||||||
|
ValueCheck(name="member", value="0"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Try accessing the members of the class and base class.
|
||||||
|
self.expect_expr("derived.pointer", result_type="Derived *")
|
||||||
|
self.expect_expr("derived.member", result_type="int", result_value="0")
|
|
@ -0,0 +1,17 @@
|
||||||
|
template <typename T> struct Base {
|
||||||
|
Base(T &t) : ref(t), pointer(&t) {}
|
||||||
|
// Try referencing `Derived` via different ways to potentially make LLDB
|
||||||
|
// pull in the definition (which would recurse back to this base class).
|
||||||
|
T &ref;
|
||||||
|
T *pointer;
|
||||||
|
T func() { return ref; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Derived : Base<Derived> {
|
||||||
|
Derived() : Base<Derived>(*this) {}
|
||||||
|
int member = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Derived derived;
|
||||||
|
|
||||||
|
int main() { return derived.member; }
|
Loading…
Reference in New Issue