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

Galina Kistanova via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 31 11:49:12 PDT 2018


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/2207601a/attachment-0001.html>


More information about the cfe-commits mailing list