[llvm] r219829 - Correctly handle references to section symbols.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Oct 16 17:34:31 PDT 2014


Thanks! Debugging.

On 16 October 2014 20:19, Rui Ueyama <ruiu at google.com> wrote:
> Rafael,
>
> This is a test case. Clang now miscompiles this code. As a result it will
> print out "i=0 j=1" while it should be "i=1 j=1". Let me roll back this
> change to fix the issue.
>
> #include <iostream>
>
> static int i = 0;
> static int j = 0;
>
> class C {
> public:
>   C() { i++; }
> };
>
> template<typename T>
> class D {
> public:
>   D() { j++; }
>   C *f() { return &x; }
>   static C x;
> };
>
> template<typename T> C D<T>::x;
>
> int main() {
>   D<void> d;
>   d.f();
>   std::cout << "i=" << i << " j=" << j << "\n";
> }
>
> On Thu, Oct 16, 2014 at 3:24 PM, Rui Ueyama <ruiu at google.com> wrote:
>>
>> Previously, relocations applied to .rela.ctors sections in an object file
>> pointed to different .text.startup sections in the same file, but after this
>> patch they point to the same .text.startup section. Because this patch
>> handles section names, it's likely that there's something with that.
>>
>> Sorry for the frequent and incomplete updates. I'll let you know once I
>> get a reproducible test case.
>>
>> On Thu, Oct 16, 2014 at 2:43 PM, Rui Ueyama <ruiu at google.com> wrote:
>>>
>>> On Thu, Oct 16, 2014 at 2:40 PM, Rafael EspĂ­ndola
>>> <rafael.espindola at gmail.com> wrote:
>>>>
>>>> > I compared the DSOs built with and without this patch, and found that
>>>> > although the size of .ctor sections are the same, the bad DSO contains
>>>> > repetition. So some constructors are called more than once (and
>>>> > probably
>>>> > some are not called at all). That seems the direct cause of the issue.
>>>> >
>>>> > The test is gigantic and having a lot of dependencies. It takes a
>>>> > little bit
>>>> > more time to understand what's going on there.
>>>>
>>>> Is it open source? I would be more than happy to help reduce it.
>>>
>>>
>>> Sorry, no it's not. I'll try to create a minimal test case to reproduce
>>> the issue.
>>
>>
>




More information about the llvm-commits mailing list