2 Test that we can call C++ template fucntions.
5 from lldbsuite
.test
.decorators
import *
6 from lldbsuite
.test
.lldbtest
import *
7 from lldbsuite
.test
import lldbutil
10 class TemplateFunctionsTestCase(TestBase
):
11 def do_test_template_function(self
, add_cast
):
13 lldbutil
.run_to_source_breakpoint(
14 self
, "// break here", lldb
.SBFileSpec("main.cpp", False)
18 self
.expect_expr("(int) foo(42)", result_type
="int", result_value
="42")
24 "warning: <user expression 0>:1:4: '<=>' is a single token in C++20; add a space to avoid a change in behavior"
28 self
.expect_expr("foo(42)", result_type
="int", result_value
="42")
30 # overload with template case
31 self
.expect_expr("h(10)", result_type
="int", result_value
="10")
34 self
.expect_expr("f(A::C{})", result_type
="int", result_value
="4")
36 # ADL lookup but no overload
37 self
.expect_expr("g(A::C{})", result_type
="int", result_value
="4")
39 # variadic function cases
40 self
.expect_expr("var(1)", result_type
="int", result_value
="10")
41 self
.expect_expr("var(1, 2)", result_type
="int", result_value
="10")
43 # Overloaded templated operator case
44 self
.expect_expr("b1 > b2", result_type
="bool", result_value
="true")
45 self
.expect_expr("b1 >> b2", result_type
="bool", result_value
="true")
46 self
.expect_expr("b1 << b2", result_type
="bool", result_value
="true")
47 self
.expect_expr("b1 == b2", result_type
="bool", result_value
="true")
49 # Overloaded operator case
50 self
.expect_expr("d1 > d2", result_type
="bool", result_value
="true")
51 self
.expect_expr("d1 >> d2", result_type
="bool", result_value
="true")
52 self
.expect_expr("d1 << d2", result_type
="bool", result_value
="true")
53 self
.expect_expr("d1 == d2", result_type
="bool", result_value
="true")
56 def test_template_function_with_cast(self
):
57 self
.do_test_template_function(True)
60 @expectedFailureAll(debug_info
=["dwarf", "gmodules", "dwo"])
61 def test_template_function_without_cast(self
):
62 self
.do_test_template_function(False)