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