2 Test that we correctly handle inline namespaces.
7 from lldbsuite
.test
.decorators
import *
8 from lldbsuite
.test
.lldbtest
import *
9 from lldbsuite
.test
import lldbutil
12 class TestInlineNamespace(TestBase
):
16 lldbutil
.run_to_source_breakpoint(
17 self
, "// Set break point at this line.", lldb
.SBFileSpec("main.cpp")
20 # The 'A::B::f' function must be found via 'A::f' as 'B' is an inline
22 self
.expect_expr("A::f()", result_type
="int", result_value
="3")
23 # But we should still find the function when we pretend the inline
24 # namespace is not inline.
25 self
.expect_expr("A::B::f()", result_type
="int", result_value
="3")
27 self
.expect_expr("A::B::global_var", result_type
="int", result_value
="0")
28 # FIXME: should be ambiguous lookup but ClangExpressionDeclMap takes
29 # first global variable that the lookup found, which in this case
31 self
.expect_expr("A::global_var", result_type
="int", result_value
="0")
33 self
.expect_expr("A::B::C::global_var", result_type
="int", result_value
="1")
34 self
.expect_expr("A::C::global_var", result_type
="int", result_value
="1")
36 self
.expect_expr("A::B::D::nested_var", result_type
="int", result_value
="2")
37 self
.expect_expr("A::D::nested_var", result_type
="int", result_value
="2")
38 self
.expect_expr("A::B::nested_var", result_type
="int", result_value
="2")
39 self
.expect_expr("A::nested_var", result_type
="int", result_value
="2")
41 self
.expect_expr("A::E::F::other_var", result_type
="int", result_value
="3")
42 self
.expect_expr("A::E::other_var", result_type
="int", result_value
="3")
45 "expr A::E::global_var",
47 substrs
=["no member named 'global_var' in namespace 'A::E'"],
50 "expr A::E::F::global_var",
52 substrs
=["no member named 'global_var' in namespace 'A::E::F'"],
58 substrs
=["no member named 'other_var' in namespace 'A'"],
61 "expr A::B::other_var",
63 substrs
=["no member named 'other_var' in namespace 'A::B'"],
68 substrs
=["no member named 'other_var' in namespace 'A::B'"],
71 # 'frame variable' can correctly distinguish between A::B::global_var and A::global_var
72 gvars
= self
.target().FindGlobalVariables("A::global_var", 10)
73 self
.assertEqual(len(gvars
), 1)
74 self
.assertEqual(gvars
[0].GetValueAsSigned(), 4)
76 self
.expect("frame variable A::global_var", substrs
=["(int) A::global_var = 4"])
78 "frame variable A::B::global_var", substrs
=["(int) A::B::global_var = 0"]