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