# 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