# 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
