| # REQUIRES: target-windows |
| |
| # Test namespace lookup. |
| # RUN: split-file %s %t |
| # RUN: %build --nodefaultlib -o %t.exe -- %t/main.cpp |
| # RUN: %lldb -f %t.exe -s \ |
| # RUN: %t/commands.input 2>&1 | FileCheck %s |
| |
| #--- main.cpp |
| |
| struct S { |
| char a[1]; |
| }; |
| |
| namespace Outer { |
| |
| struct S { |
| char a[2]; |
| }; |
| |
| namespace Inner1 { |
| struct S { |
| char a[3]; |
| }; |
| |
| namespace Inner2 { |
| struct S { |
| char a[4]; |
| }; |
| } // namespace Inner2 |
| } // namespace Inner1 |
| |
| namespace Inner2 { |
| struct S { |
| char a[5]; |
| }; |
| } // namespace Inner2 |
| |
| namespace { |
| struct A { |
| char a[6]; |
| }; |
| } // namespace |
| |
| } // namespace Outer |
| |
| namespace { |
| struct A { |
| char a[7]; |
| }; |
| } // namespace |
| |
| int main(int argc, char **argv) { |
| S s; |
| Outer::S os; |
| Outer::Inner1::S oi1s; |
| Outer::Inner1::Inner2::S oi1i2s; |
| Outer::Inner2::S oi2s; |
| A a1; |
| Outer::A a2; |
| return sizeof(s) + sizeof(os) + sizeof(oi1s) + sizeof(oi1i2s) + sizeof(oi2s) + sizeof(a1) + sizeof(a2); |
| } |
| |
| #--- commands.input |
| |
| b main |
| r |
| |
| type lookup S |
| type lookup ::S |
| type lookup Outer::S |
| type lookup Outer::Inner1::S |
| type lookup Inner1::S |
| type lookup Outer::Inner1::Inner2::S |
| type lookup Inner2::S |
| type lookup Outer::Inner2::S |
| type lookup Outer::A |
| type lookup A |
| type lookup ::A |
| # Test that Clang can find the namespaces as well |
| expr sizeof(S) |
| expr sizeof(::S) |
| expr sizeof(Outer::S) |
| expr sizeof(Outer::Inner1::S) |
| expr sizeof(Inner1::S) |
| expr sizeof(Outer::Inner1::Inner2::S) |
| expr sizeof(Outer::Inner2::S) |
| expr sizeof(Outer::A) |
| expr sizeof(A) |
| expr sizeof(::A) |
| |
| quit |
| |
| # CHECK: (lldb) type lookup S |
| # CHECK: struct S { |
| # CHECK: struct S { |
| # CHECK: struct S { |
| # CHECK: struct S { |
| # CHECK: struct S { |
| # CHECK: } |
| # CHECK-NEXT: (lldb) type lookup ::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[1]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Outer::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[2]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Outer::Inner1::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[3]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Inner1::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[3]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Outer::Inner1::Inner2::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[4]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Inner2::S |
| # CHECK-NEXT: struct S { |
| # CHECK: struct S { |
| # CHECK: } |
| # CHECK-NEXT: (lldb) type lookup Outer::Inner2::S |
| # CHECK-NEXT: struct S { |
| # CHECK-NEXT: char a[5]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup Outer::A |
| # CHECK-NEXT: struct A { |
| # CHECK-NEXT: char a[6]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) type lookup A |
| # CHECK-NEXT: struct A { |
| # CHECK: struct A { |
| # CHECK: } |
| # CHECK-NEXT: (lldb) type lookup ::A |
| # CHECK-NEXT: struct A { |
| # CHECK-NEXT: char a[7]; |
| # CHECK-NEXT: } |
| # CHECK-NEXT: (lldb) expr sizeof(S) |
| # CHECK-NEXT: (__size_t) $0 = 1 |
| # CHECK-NEXT: (lldb) expr sizeof(::S) |
| # CHECK-NEXT: (__size_t) $1 = 1 |
| # CHECK-NEXT: (lldb) expr sizeof(Outer::S) |
| # CHECK-NEXT: (__size_t) $2 = 2 |
| # CHECK-NEXT: (lldb) expr sizeof(Outer::Inner1::S) |
| # CHECK-NEXT: (__size_t) $3 = 3 |
| # CHECK-NEXT: (lldb) expr sizeof(Inner1::S) |
| # CHECK-NEXT: (__size_t) $4 = 3 |
| # CHECK-NEXT: (lldb) expr sizeof(Outer::Inner1::Inner2::S) |
| # CHECK-NEXT: (__size_t) $5 = 4 |
| # CHECK-NEXT: (lldb) expr sizeof(Outer::Inner2::S) |
| # CHECK-NEXT: (__size_t) $6 = 5 |
| # CHECK-NEXT: (lldb) expr sizeof(Outer::A) |
| # CHECK-NEXT: (__size_t) $7 = 6 |
| # CHECK-NEXT: (lldb) expr sizeof(A) |
| # CHECK-NEXT: (__size_t) $8 = 7 |
| # CHECK-NEXT: (lldb) expr sizeof(::A) |
| # CHECK-NEXT: (__size_t) $9 = 7 |