r345330 - Add MS ABI mangling for operator<=>.

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 26 06:08:07 PDT 2018


It seems the generated MS mangling differs between 32- and 64-bit, and
the test expects the latter.

Let's revert in the meantime.. r345380


On Fri, Oct 26, 2018 at 1:10 PM, Peter Smith via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> This commit, specifically the changes made to
> CodeGenCXX/cxx2a-three-way-comparison.cpp, are failing on all the Arm
> and AArch64 builders that run check-clang and some of the other
> non-X86 builders as well like S390 and PPC.
>
> It seems to be the // RUN: not %clang_cc1 -std=c++2a -emit-llvm %s -o
> - -triple %ms_abi_triple 2>&1 | FileCheck %s --check-prefix=MSABI
> that is failing. I originally thought that this was due to our
> builders not having the X86 target configured but it seems to be
> reproducible on an Arm v7 machine (Cortex-A72) with the X86 backend
> included. The triple expands to -triple i686-pc-windows-msvc
>
> The failure appears to be common across all builders:
> /home/buildbots/ppc64le-clang-test/clang-ppc64le/llvm/tools/clang/test/CodeGenCXX/cxx2a-three-way-comparison.cpp:11:11:
> error: MSABI: expected string not found in input
> // MSABI: define {{.*}}@"??__MA@@QEAAXH at Z"(
>           ^
> <stdin>:1:1: note: scanning from here
> ; ModuleID = '/home/buildbots/ppc64le-clang-test/clang-ppc64le/llvm/tools/clang/test/CodeGenCXX/cxx2a-three-way-comparison.cpp'
> ^
> <stdin>:9:23: note: possible intended match here
> define dso_local x86_thiscallcc void @"??__MA@@QAEXH at Z"(%struct.A*
> %this, i32) #0 align 2 {
>
> Could you take a look?
>
> Thanks in advance
>
> Peter
>
> Links to builders:
> http://lab.llvm.org:8011/builders/clang-cmake-aarch64-quick
> http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick
> http://lab.llvm.org:8011/builders/clang-s390x-linux
> http://lab.llvm.org:8011/builders/clang-ppc64le-linux
> On Fri, 26 Oct 2018 at 00:23, Richard Smith via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>> I've already pointed Zach at this and I think he's going to handle it.
>>
>> On Thu, 25 Oct 2018 at 16:00, Nico Weber via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>>>
>>> Could you update the demangler too?
>>>
>>> On Thu, Oct 25, 2018 at 6:53 PM Richard Smith via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>>>>
>>>> Author: rsmith
>>>> Date: Thu Oct 25 15:51:16 2018
>>>> New Revision: 345330
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=345330&view=rev
>>>> Log:
>>>> Add MS ABI mangling for operator<=>.
>>>>
>>>> Thanks to Cameron DaCamara at Microsoft for letting us know what their
>>>> chosen mangling is here!
>>>>
>>>> Added:
>>>>     cfe/trunk/test/CodeGenCXX/mangle-ms-cxx2a.cpp
>>>> Modified:
>>>>     cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>>>     cfe/trunk/test/CodeGenCXX/cxx2a-three-way-comparison.cpp
>>>>
>>>> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=345330&r1=345329&r2=345330&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
>>>> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Thu Oct 25 15:51:16 2018
>>>> @@ -1240,15 +1240,8 @@ void MicrosoftCXXNameMangler::mangleOper
>>>>    case OO_Array_Delete: Out << "?_V"; break;
>>>>    // <operator-name> ::= ?__L # co_await
>>>>    case OO_Coawait: Out << "?__L"; break;
>>>> -
>>>> -  case OO_Spaceship: {
>>>> -    // FIXME: Once MS picks a mangling, use it.
>>>> -    DiagnosticsEngine &Diags = Context.getDiags();
>>>> -    unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
>>>> -      "cannot mangle this three-way comparison operator yet");
>>>> -    Diags.Report(Loc, DiagID);
>>>> -    break;
>>>> -  }
>>>> +  // <operator-name> ::= ?__M # <=>
>>>> +  case OO_Spaceship: Out << "?__M"; break;
>>>>
>>>>    case OO_Conditional: {
>>>>      DiagnosticsEngine &Diags = Context.getDiags();
>>>>
>>>> Modified: cfe/trunk/test/CodeGenCXX/cxx2a-three-way-comparison.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx2a-three-way-comparison.cpp?rev=345330&r1=345329&r2=345330&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/test/CodeGenCXX/cxx2a-three-way-comparison.cpp (original)
>>>> +++ cfe/trunk/test/CodeGenCXX/cxx2a-three-way-comparison.cpp Thu Oct 25 15:51:16 2018
>>>> @@ -1,24 +1,28 @@
>>>> -// RUN: %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %itanium_abi_triple | FileCheck %s --check-prefix=ITANIUM
>>>> -// RUN: not %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %ms_abi_triple 2>&1 | FileCheck %s --check-prefix=MSABI
>>>> +// RUN: %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %itanium_abi_triple | FileCheck %s --check-prefixes=CHECK,ITANIUM
>>>> +// RUN: %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %ms_abi_triple | FileCheck %s --check-prefixes=CHECK,MSABI
>>>>  // RUN: not %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %itanium_abi_triple -DBUILTIN 2>&1 | FileCheck %s --check-prefix=BUILTIN
>>>> -// MSABI: cannot mangle this three-way comparison operator yet
>>>> +// RUN: not %clang_cc1 -std=c++2a -emit-llvm %s -o - -triple %ms_abi_triple -DBUILTIN 2>&1 | FileCheck %s --check-prefix=BUILTIN
>>>>
>>>>  struct A {
>>>>    void operator<=>(int);
>>>>  };
>>>>
>>>>  // ITANIUM: define {{.*}}@_ZN1AssEi(
>>>> +// MSABI: define {{.*}}@"??__MA@@QEAAXH at Z"(
>>>>  void A::operator<=>(int) {}
>>>>
>>>>  // ITANIUM: define {{.*}}@_Zssi1A(
>>>> +// MSABI: define {{.*}}@"??__M at YAXHUA@@@Z"(
>>>>  void operator<=>(int, A) {}
>>>>
>>>>  int operator<=>(A, A);
>>>>
>>>>  // ITANIUM: define {{.*}}_Z1f1A(
>>>> +// MSABI: define {{.*}}"?f@@YAHUA@@@Z"(
>>>>  int f(A a) {
>>>>    // ITANIUM: %[[RET:.*]] = call {{.*}}_Zss1AS_(
>>>> -  // ITANIUM: ret i32 %[[RET]]
>>>> +  // MSABI: %[[RET:.*]] = call {{.*}}"??__M at YAHUA@@0 at Z"(
>>>> +  // CHECK: ret i32 %[[RET]]
>>>>    return a <=> a;
>>>>  }
>>>>
>>>>
>>>> Added: cfe/trunk/test/CodeGenCXX/mangle-ms-cxx2a.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-cxx2a.cpp?rev=345330&view=auto
>>>> ==============================================================================
>>>> --- cfe/trunk/test/CodeGenCXX/mangle-ms-cxx2a.cpp (added)
>>>> +++ cfe/trunk/test/CodeGenCXX/mangle-ms-cxx2a.cpp Thu Oct 25 15:51:16 2018
>>>> @@ -0,0 +1,6 @@
>>>> +// RUN: %clang_cc1 -std=c++2a -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=19.00 | FileCheck %s
>>>> +
>>>> +struct A {};
>>>> +
>>>> +// CHECK-DAG: define {{.*}} @"??__M at YAXUA@@0 at Z"
>>>> +void operator<=>(A, A) {}
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list