161 lines · plain
1# REQUIRES: target-windows2 3# Test namespace lookup.4# RUN: split-file %s %t5# RUN: %build --nodefaultlib -o %t.exe -- %t/main.cpp6# RUN: %lldb -f %t.exe -s \7# RUN: %t/commands.input 2>&1 | FileCheck %s8 9#--- main.cpp10 11struct S {12 char a[1];13};14 15namespace Outer {16 17 struct S {18 char a[2];19 };20 21 namespace Inner1 {22 struct S {23 char a[3];24 };25 26 namespace Inner2 {27 struct S {28 char a[4];29 };30 } // namespace Inner231 } // namespace Inner132 33 namespace Inner2 {34 struct S {35 char a[5];36 };37 } // namespace Inner238 39 namespace {40 struct A {41 char a[6];42 };43 } // namespace44 45} // namespace Outer46 47namespace {48 struct A {49 char a[7];50 };51} // namespace52 53int main(int argc, char **argv) {54 S s;55 Outer::S os;56 Outer::Inner1::S oi1s;57 Outer::Inner1::Inner2::S oi1i2s;58 Outer::Inner2::S oi2s;59 A a1;60 Outer::A a2;61 return sizeof(s) + sizeof(os) + sizeof(oi1s) + sizeof(oi1i2s) + sizeof(oi2s) + sizeof(a1) + sizeof(a2);62}63 64#--- commands.input65 66b main67r68 69type lookup S70type lookup ::S71type lookup Outer::S72type lookup Outer::Inner1::S73type lookup Inner1::S74type lookup Outer::Inner1::Inner2::S75type lookup Inner2::S76type lookup Outer::Inner2::S77type lookup Outer::A78type lookup A79type lookup ::A80# Test that Clang can find the namespaces as well81expr sizeof(S)82expr sizeof(::S)83expr sizeof(Outer::S)84expr sizeof(Outer::Inner1::S)85expr sizeof(Inner1::S)86expr sizeof(Outer::Inner1::Inner2::S)87expr sizeof(Outer::Inner2::S)88expr sizeof(Outer::A)89expr sizeof(A)90expr sizeof(::A)91 92quit93 94# CHECK: (lldb) type lookup S 95# CHECK: struct S {96# CHECK: struct S {97# CHECK: struct S {98# CHECK: struct S {99# CHECK: struct S {100# CHECK: }101# CHECK-NEXT: (lldb) type lookup ::S102# CHECK-NEXT: struct S {103# CHECK-NEXT: char a[1];104# CHECK-NEXT: }105# CHECK-NEXT: (lldb) type lookup Outer::S106# CHECK-NEXT: struct S {107# CHECK-NEXT: char a[2];108# CHECK-NEXT: }109# CHECK-NEXT: (lldb) type lookup Outer::Inner1::S110# CHECK-NEXT: struct S {111# CHECK-NEXT: char a[3];112# CHECK-NEXT: }113# CHECK-NEXT: (lldb) type lookup Inner1::S114# CHECK-NEXT: struct S {115# CHECK-NEXT: char a[3];116# CHECK-NEXT: }117# CHECK-NEXT: (lldb) type lookup Outer::Inner1::Inner2::S118# CHECK-NEXT: struct S {119# CHECK-NEXT: char a[4];120# CHECK-NEXT: }121# CHECK-NEXT: (lldb) type lookup Inner2::S 122# CHECK-NEXT: struct S {123# CHECK: struct S {124# CHECK: }125# CHECK-NEXT: (lldb) type lookup Outer::Inner2::S 126# CHECK-NEXT: struct S {127# CHECK-NEXT: char a[5];128# CHECK-NEXT: }129# CHECK-NEXT: (lldb) type lookup Outer::A 130# CHECK-NEXT: struct A {131# CHECK-NEXT: char a[6];132# CHECK-NEXT: }133# CHECK-NEXT: (lldb) type lookup A 134# CHECK-NEXT: struct A {135# CHECK: struct A {136# CHECK: }137# CHECK-NEXT: (lldb) type lookup ::A138# CHECK-NEXT: struct A {139# CHECK-NEXT: char a[7];140# CHECK-NEXT: }141# CHECK-NEXT: (lldb) expr sizeof(S) 142# CHECK-NEXT: (__size_t) $0 = 1143# CHECK-NEXT: (lldb) expr sizeof(::S)144# CHECK-NEXT: (__size_t) $1 = 1145# CHECK-NEXT: (lldb) expr sizeof(Outer::S)146# CHECK-NEXT: (__size_t) $2 = 2147# CHECK-NEXT: (lldb) expr sizeof(Outer::Inner1::S)148# CHECK-NEXT: (__size_t) $3 = 3149# CHECK-NEXT: (lldb) expr sizeof(Inner1::S)150# CHECK-NEXT: (__size_t) $4 = 3151# CHECK-NEXT: (lldb) expr sizeof(Outer::Inner1::Inner2::S)152# CHECK-NEXT: (__size_t) $5 = 4153# CHECK-NEXT: (lldb) expr sizeof(Outer::Inner2::S)154# CHECK-NEXT: (__size_t) $6 = 5155# CHECK-NEXT: (lldb) expr sizeof(Outer::A)156# CHECK-NEXT: (__size_t) $7 = 6157# CHECK-NEXT: (lldb) expr sizeof(A)158# CHECK-NEXT: (__size_t) $8 = 7159# CHECK-NEXT: (lldb) expr sizeof(::A)160# CHECK-NEXT: (__size_t) $9 = 7161