Compiling the test case in the attached patch using arm-linux-gnueabi target g++ with the options "-O2 -fweb -fPIC -fvisibility=hidden" will give an error: Assembler messages: Error: symbol `.LPIC0' is already defined That's because an instruction, which can't be copied, is combined into another instruction while that non-copyable instruction is still kept since its result is needed later. GCC will generate the same label ".LPIC0" for that non-copyable instruction and the combined instruction since the label number is also copied and same for both instructions. With this patch, GCC will not combine instructions if they can't be copied. Tested on arm-linux-gnueabi with c,c++,lto. No regressions are found. Is it OK? Regards, -- Jie Zhang CodeSourcery