// In this test, we define struct that exist might exist at the different
// levels in the code and test that we can properly locate these types with
// a varienty of different expressions.

namespace nsp_a {
  struct namespace_only {
    int a;
  };
  struct namespace_and_file {
    int aa;
  };
  struct contains_type {
    struct in_contains_type {
      int aaa;
    };
  };
};
namespace nsp_b {
  struct namespace_only {
    int b;
  };
  struct namespace_and_file {
    int bb;
  };
  struct contains_type {
    struct in_contains_type {
      int bbb;
    };
  };
};

struct namespace_and_file {
  int ff;
};

struct contains_type {
  struct in_contains_type {
    int fff;
  };
};


int main (int argc, char const *argv[]) {
  nsp_a::namespace_only a_namespace_only = { 1 };
  nsp_a::namespace_and_file a_namespace_and_file = { 2 };
  nsp_a::contains_type::in_contains_type a_in_contains_type = { 3 };
  nsp_b::namespace_only b_namespace_only = { 11 };
  nsp_b::namespace_and_file b_namespace_and_file = { 22 };
  nsp_b::contains_type::in_contains_type b_in_contains_type = { 33 };
  namespace_and_file file_namespace_and_file = { 44 };
  contains_type::in_contains_type file_in_contains_type = { 55 };
  int i = 123; // Provide an integer that can be used for casting
  // Take address of "i" to ensure it is in memory
  if (&i == &argc) {
    i = -1;
  }
  return i == -1; // Set a breakpoint here
}
