vnmakarov / mir

A lightweight JIT compiler based on MIR (Medium Internal Representation) and C11 JIT compiler and interpreter based on MIR
MIT License
2.29k stars 145 forks source link

Please implement _Thread_local #394

Open andy-hanson opened 6 months ago

andy-hanson commented 6 months ago
#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.

iacore commented 6 months ago

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