1#include "ns.h"
2
3static int func()
4{
5 std::printf(format: "static m2.cpp func()\n");
6 return 2;
7}
8void test_lookup_at_file_scope()
9{
10 // BP_file_scope
11 std::printf(format: "at file scope: func() = %d\n", func()); // eval func(), exp: 2
12 std::printf(format: "at file scope: func(10) = %d\n", func(a: 10)); // eval func(10), exp: 11
13}
14namespace A {
15 namespace B {
16 int func()
17 {
18 std::printf(format: "A::B::func()\n");
19 return 4;
20 }
21 void test_lookup_at_nested_ns_scope()
22 {
23 // BP_nested_ns_scope
24 std::printf(format: "at nested ns scope: func() = %d\n", func()); // eval func(), exp: 4
25
26 //printf("func(10) = %d\n", func(10)); // eval func(10), exp: 13
27 // NOTE: Under the rules of C++, this test would normally get an error
28 // because A::B::func() hides A::func(), but lldb intentionally
29 // disobeys these rules so that the intended overload can be found
30 // by only removing duplicates if they have the same type.
31 }
32 void test_lookup_at_nested_ns_scope_after_using()
33 {
34 // BP_nested_ns_scope_after_using
35 using A::func;
36 std::printf(format: "at nested ns scope after using: func() = %d\n", func()); // eval func(), exp: 3
37 }
38 }
39}
40int A::foo()
41{
42 std::printf(format: "A::foo()\n");
43 return 42;
44}
45int A::func(int a)
46{
47 std::printf(format: "A::func(int)\n");
48 return a + 3;
49}
50void A::test_lookup_at_ns_scope()
51{
52 // BP_ns_scope
53 std::printf(format: "at nested ns scope: func() = %d\n", func()); // eval func(), exp: 3
54 std::printf(format: "at nested ns scope: func(10) = %d\n", func(a: 10)); // eval func(10), exp: 13
55 std::printf(format: "at nested ns scope: foo() = %d\n", foo()); // eval foo(), exp: 42
56}
57

source code of lldb/test/API/lang/cpp/namespace/ns2.cpp