It looks like 'optimize' is necessary in cases where I do something like: __thread int i = 0; i = 5; // Set variable in original tls region set_tls_desc(new_tls); i = 5; // Set variable in new tls region Where I set i equal to the same value, but in 2 different TLS regions. Glancing through the assembly, it appears that the code for the nested function indeed get's generated (as per the 'noinline'), but then it simply noops and returns. Kevin On Tue, Sep 6, 2011 at 12:09 AM, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: > Kevin Klues <klueska@xxxxxxxxxxxxxxx> writes: > >> That said, do you see any obvious issues with my solution? It seems >> to work for all of the test cases I've thrown at it, but I could be >> missing something. Additionally, do you have any suggestions for a >> better method that achieves similar results? Ideally I'd like a >> solution that didn't require the use of the 'optimize' attribute as >> (unfortunately) some of the systems on which we'd like to compile our >> code still use gcc < 4.4. > > I don't see any obvious issues with your solution. I'm not sure why you > need to use the optimize attribute; I would have expected that the > noinline attribute would be sufficient here. > > Ian > -- ~K€vin