// clang-format off
typedef int IntTypedef;
IntTypedef g_IntVar;  // Testing globals.

typedef enum Enum { // Testing constants.
  RED,
  GREEN,
  BLUE
} EnumTypedef;
EnumTypedef g_EnumVar;  // Testing members.

// FIXME: `sg_IntVar` appears both in global scope's children and compiland's
// children but with different symbol's id.
static int sg_IntVar = -1;  // Testing file statics.

// FIXME: `g_Const` appears both in global scope's children and compiland's
// children but with different symbol's id.
const int g_Const = 0x88;  // Testing constant data.
const int *g_pConst = &g_Const; // Avoid optimizing the const away

thread_local int g_tls = 0;  // Testing thread-local storage.

class Class {
  static int m_StaticClassMember;
public:
  explicit Class(int a) {}
  void Func() {}
};
int Class::m_StaticClassMember = 10; // Testing static class members.
Class ClassVar(1);

int f(int var_arg1, int var_arg2) {  // Testing parameters.
  long same_name_var = -1;
  return 1;
}

int same_name_var = 100;
int main() {
  int same_name_var = 0;  // Testing locals.
  const char local_const = 0x1;

  // FIXME: 'local_CString` is not found through compiland's children.
  const char local_CString[] = "abc";  // Testing constant string.
  const char *local_pCString = local_CString; // Avoid optimizing the const away

  int a = 10;
  a++;

  ClassVar.Func();
  return 0;
}
