r341117 - [MS ABI] Fix mangling issue with dynamic initializer stubs.

Zachary Turner via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 31 13:25:58 PDT 2018


It looks like tnorthover has fixed these in r341240

On Fri, Aug 31, 2018 at 1:08 PM Zachary Turner <zturner at google.com> wrote:

> Are we sure it was my commit?  Because this seems like a very unusual
> failure given the nature of the commit.  I'll try to reproduce it locally
> and report back.
>
> On Fri, Aug 31, 2018 at 11:49 AM Galina Kistanova <gkistanova at gmail.com>
> wrote:
>
>> Hello Zachary,
>>
>> It looks like this commit added broken tests on one of our builders:
>>
>> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/19508
>>
>> . . .
>> Failing Tests (2):
>>     LLVM-Unit :: ADT/./ADTTests.exe/HashingTest.HashCombineRangeGoldenTest
>>     Clang :: CodeGenCXX/catch-undef-behavior.cpp
>>
>> Please have a look?
>> The builder was already red and did not send notifications on this.
>>
>> Thanks
>>
>> Galina
>>
>> On Thu, Aug 30, 2018 at 1:54 PM Zachary Turner via cfe-commits <
>> cfe-commits at lists.llvm.org> wrote:
>>
>>> Author: zturner
>>> Date: Thu Aug 30 13:53:11 2018
>>> New Revision: 341117
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=341117&view=rev
>>> Log:
>>> [MS ABI] Fix mangling issue with dynamic initializer stubs.
>>>
>>> There are two types of dynamic initializer stubs.  There's
>>>
>>>   `dynamic initializer for 'x''(void)
>>>
>>> and
>>>
>>>   `dynamic initializer for `static Foo::Bar StaticDataMember''(void)
>>>
>>> The second case is disambiguated from the first by the presence of
>>> a ? after the operator code.  So the first will appear something like
>>> ?__E<name> while the second will appear something like ?__E?<name>.
>>> clang-cl was mangling these both the same though.  This patch
>>> matches behavior with cl.
>>>
>>> Differential Revision: https://reviews.llvm.org/D51500
>>>
>>> Modified:
>>>     cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>>     cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
>>>     cfe/trunk/test/CodeGenCXX/pragma-init_seg.cpp
>>>
>>> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=341117&r1=341116&r2=341117&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
>>> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Thu Aug 30 13:53:11 2018
>>> @@ -3217,10 +3217,13 @@ void MicrosoftMangleContextImpl::mangleI
>>>    msvc_hashing_ostream MHO(Out);
>>>    MicrosoftCXXNameMangler Mangler(*this, MHO);
>>>    Mangler.getStream() << "??__" << CharCode;
>>> -  Mangler.mangleName(D);
>>>    if (D->isStaticDataMember()) {
>>> +    Mangler.getStream() << '?';
>>> +    Mangler.mangleName(D);
>>>      Mangler.mangleVariableEncoding(D);
>>> -    Mangler.getStream() << '@';
>>> +    Mangler.getStream() << "@@";
>>> +  } else {
>>> +    Mangler.mangleName(D);
>>>    }
>>>    // This is the function class mangling.  These stubs are global,
>>> non-variadic,
>>>    // cdecl functions that return void and take no args.
>>>
>>> Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp?rev=341117&r1=341116&r2=341117&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
>>> (original)
>>> +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp Thu
>>> Aug 30 13:53:11 2018
>>> @@ -3,8 +3,8 @@
>>>  // CHECK: @llvm.global_ctors = appending global [5 x { i32, void ()*,
>>> i8* }] [
>>>  // CHECK: { i32, void ()*, i8* } { i32 65535, void ()*
>>> @"??__Eselectany1@@YAXXZ", i8* getelementptr inbounds (%struct.S,
>>> %struct.S* @"?selectany1@@3US@@A", i32 0, i32 0) },
>>>  // CHECK: { i32, void ()*, i8* } { i32 65535, void ()*
>>> @"??__Eselectany2@@YAXXZ", i8* getelementptr inbounds (%struct.S,
>>> %struct.S* @"?selectany2@@3US@@A", i32 0, i32 0) },
>>> -// CHECK: { i32, void ()*, i8* } { i32 65535, void ()* @"??__Es@
>>> ?$ExportedTemplate at H@@2US@@A at YAXXZ", i8* getelementptr inbounds
>>> (%struct.S, %struct.S* @"?s@?$ExportedTemplate at H@@2US@@A", i32 0, i32
>>> 0) },
>>> -// CHECK: { i32, void ()*, i8* } { i32 65535, void ()* @"??__Efoo@?$B at H
>>> @@2VA@@A at YAXXZ", i8* bitcast (%class.A* @"?foo@?$B at H@@2VA@@A" to i8*) },
>>> +// CHECK: { i32, void ()*, i8* } { i32 65535, void ()* @"??__E?s@
>>> ?$ExportedTemplate at H@@2US@@A@@YAXXZ", i8* getelementptr inbounds
>>> (%struct.S, %struct.S* @"?s@?$ExportedTemplate at H@@2US@@A", i32 0, i32
>>> 0) },
>>> +// CHECK: { i32, void ()*, i8* } { i32 65535, void ()* @"??__E?foo@
>>> ?$B at H@@2VA@@A@@YAXXZ", i8* bitcast (%class.A* @"?foo@?$B at H@@2VA@@A" to
>>> i8*) },
>>>  // CHECK: { i32, void ()*, i8* } { i32 65535, void ()*
>>> @_GLOBAL__sub_I_microsoft_abi_static_initializers.cpp, i8* null }
>>>  // CHECK: ]
>>>
>>> @@ -231,18 +231,18 @@ void force_usage() {
>>>    DynamicDLLImportInitVSMangling::switch_test3();
>>>  }
>>>
>>> -// CHECK: define linkonce_odr dso_local void @"??__Efoo@?$B at H@@2VA@
>>> @A at YAXXZ"() {{.*}} comdat
>>> +// CHECK: define linkonce_odr dso_local void @"??__E?foo@?$B at H@@2VA@@A@@YAXXZ"()
>>> {{.*}} comdat
>>>  // CHECK-NOT: and
>>>  // CHECK-NOT: ?_Bfoo@
>>>  // CHECK: call x86_thiscallcc %class.A* @"??0A@@QAE at XZ"
>>> -// CHECK: call i32 @atexit(void ()* @"??__Ffoo@?$B at H@@2VA@@A at YAXXZ")
>>> +// CHECK: call i32 @atexit(void ()* @"??__F?foo@?$B at H@@2VA@@A@@YAXXZ")
>>>  // CHECK: ret void
>>>
>>>  // CHECK: define linkonce_odr dso_local x86_thiscallcc %class.A* @"??0A@
>>> @QAE at XZ"({{.*}}) {{.*}} comdat
>>>
>>>  // CHECK: define linkonce_odr dso_local x86_thiscallcc void @"??1A@
>>> @QAE at XZ"({{.*}}) {{.*}} comdat
>>>
>>> -// CHECK: define internal void @"??__Ffoo@?$B at H@@2VA@@A at YAXXZ"
>>> +// CHECK: define internal void @"??__F?foo@?$B at H@@2VA@@A@@YAXXZ"
>>>  // CHECK: call x86_thiscallcc void @"??1A@@QAE at XZ"{{.*}}foo
>>>  // CHECK: ret void
>>>
>>>
>>> Modified: cfe/trunk/test/CodeGenCXX/pragma-init_seg.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/pragma-init_seg.cpp?rev=341117&r1=341116&r2=341117&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/test/CodeGenCXX/pragma-init_seg.cpp (original)
>>> +++ cfe/trunk/test/CodeGenCXX/pragma-init_seg.cpp Thu Aug 30 13:53:11
>>> 2018
>>> @@ -44,7 +44,7 @@ template <typename T> struct A { static
>>>  template <typename T> const int A<T>::x = f();
>>>  template struct A<int>;
>>>  // CHECK: @"?x@?$A at H@explicit_template_instantiation@@2HB" = weak_odr
>>> dso_local global i32 0, comdat, align 4
>>> -// CHECK: @__cxx_init_fn_ptr.4 = private constant void ()* @"??__Ex@
>>> ?$A at H@explicit_template_instantiation@@2HB at YAXXZ", section ".asdf",
>>> comdat($"?x@?$A at H@explicit_template_instantiation@@2HB")
>>> +// CHECK: @__cxx_init_fn_ptr.4 = private constant void ()* @"??__E?x@
>>> ?$A at H@explicit_template_instantiation@@2HB@@YAXXZ", section ".asdf",
>>> comdat($"?x@?$A at H@explicit_template_instantiation@@2HB")
>>>  }
>>>
>>>  namespace implicit_template_instantiation {
>>> @@ -52,7 +52,7 @@ template <typename T> struct A { static
>>>  template <typename T> const int A<T>::x = f();
>>>  int g() { return A<int>::x; }
>>>  // CHECK: @"?x@?$A at H@implicit_template_instantiation@@2HB" =
>>> linkonce_odr dso_local global i32 0, comdat, align 4
>>> -// CHECK: @__cxx_init_fn_ptr.5 = private constant void ()* @"??__Ex@
>>> ?$A at H@implicit_template_instantiation@@2HB at YAXXZ", section ".asdf",
>>> comdat($"?x@?$A at H@implicit_template_instantiation@@2HB")
>>> +// CHECK: @__cxx_init_fn_ptr.5 = private constant void ()* @"??__E?x@
>>> ?$A at H@implicit_template_instantiation@@2HB@@YAXXZ", section ".asdf",
>>> comdat($"?x@?$A at H@implicit_template_instantiation@@2HB")
>>>  }
>>>
>>>  // ... and here's where we emitted user level ctors.
>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180831/93ebb4cb/attachment-0001.html>


More information about the cfe-commits mailing list