vnmakarov / mir

A lightweight JIT compiler based on MIR (Medium Internal Representation) and C11 JIT compiler and interpreter based on MIR

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Please implement _Thread_local

andy-hanson opened this issue · comments

#include <assert.h>
#include <pthread.h>

static _Thread_local int x;

void* thread_fn(void* arg) {
	x = 1;
	return NULL;
}

int main(void) {
	x = 0;

	pthread_t thread;
	int err = pthread_create(&thread, NULL, thread_fn, NULL);
	assert(err == 0);
	void* ret;
	err = pthread_join(thread, &ret);
	assert(err == 0);
	assert(ret == NULL);

	assert(x == 0);
	return 0;
}

This program works with GCC/clang but breaks with c2m (at assert(x == 0);). It appears that _Thread_local is not implemented.

the feature relies on libc and libpthread to co-operate, which is hard for MIR to do.