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:08:35 PDT 2018


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/29719a7e/attachment.html>


More information about the cfe-commits mailing list