/*
 need gcc-4.3.4 (gcc-4_3-branch r149015)
   or gcc-4.4.1 (gcc-4_4-branch r149016)
   or gcc-4.5.x (trunk r149593) or newer
 which have a properly fixed gcc/emutls.c,
 along with mingw-w64-headers r960 and
 mingw-w64-crt r973.
*/

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#if defined(_MSC_VER) /* MS Visual Studio */
#define __threadlocal__ __declspec(thread)
#elif defined(__GNUC__) && ((__GNUC__ > 4) \
  || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) || defined(__clang__)
/* gcc >= 4.3, also needs binutils >= 2.19 */
#define __threadlocal__ __thread
#else
#error No keyword for TLS vars is defined.
#endif

__threadlocal__ int tvar = 0;

int main (int argc, char **argv)
{
  (void)argv;
  if (argc != 1)
    {
      printf("not referencing tvar\n");
    }
  else
    {
      printf("incrementing tvar..\n");
      ++tvar;
      printf("   .. done (%i)\n", tvar);
    }
  printf("exiting....\n");
  exit (0);
}

