[llvm] r338067 - [MS Demangler] Add ms-arg-qualifiers.test

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 26 13:25:36 PDT 2018


Author: zturner
Date: Thu Jul 26 13:25:35 2018
New Revision: 338067

URL: http://llvm.org/viewvc/llvm-project?rev=338067&view=rev
Log:
[MS Demangler] Add ms-arg-qualifiers.test

This converts the arg qualifier mangling tests from
clang/CodeGenCXX/mangle-ms-arg-qualifiers.cpp to demangling tests.
Most tests already pass, so this patch doesn't come with any
functional change, just the addition of new tests.  The few tests
that don't pass are left in with a FIXME label so that they don't
run but serve as documentation about what still doesn't work.

Added:
    llvm/trunk/test/Demangle/ms-arg-qualifiers.test
Modified:
    llvm/trunk/lib/Demangle/MicrosoftDemangle.cpp
    llvm/trunk/test/Demangle/ms-mangle.test

Modified: llvm/trunk/lib/Demangle/MicrosoftDemangle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Demangle/MicrosoftDemangle.cpp?rev=338067&r1=338066&r2=338067&view=diff
==============================================================================
--- llvm/trunk/lib/Demangle/MicrosoftDemangle.cpp (original)
+++ llvm/trunk/lib/Demangle/MicrosoftDemangle.cpp Thu Jul 26 13:25:35 2018
@@ -483,6 +483,11 @@ void Type::outputPre(OutputStream &OS, T
     outputSpaceIfNecessary(OS);
     OS << "volatile";
   }
+
+  if (Ty.Quals & Q_Restrict) {
+    outputSpaceIfNecessary(OS);
+    OS << "__restrict";
+  }
 }
 
 // Write the "second half" of a given type.
@@ -574,8 +579,6 @@ void PointerType::outputPre(OutputStream
   // FIXME: We should output this, but it requires updating lots of tests.
   // if (Ty.Quals & Q_Pointer64)
   //  OS << " __ptr64";
-  if (Quals & Q_Restrict)
-    OS << " __restrict";
 }
 
 void PointerType::outputPost(OutputStream &OS) {

Added: llvm/trunk/test/Demangle/ms-arg-qualifiers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Demangle/ms-arg-qualifiers.test?rev=338067&view=auto
==============================================================================
--- llvm/trunk/test/Demangle/ms-arg-qualifiers.test (added)
+++ llvm/trunk/test/Demangle/ms-arg-qualifiers.test Thu Jul 26 13:25:35 2018
@@ -0,0 +1,248 @@
+; These tests are based on clang/test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp
+; RUN: llvm-undname < %s | FileCheck %s
+
+; CHECK-NOT: Invalid mangled name
+
+?foo@@YAXI at Z
+; CHECK: void __cdecl foo(unsigned int)
+
+?foo@@YAXN at Z  
+; CHECK: void __cdecl foo(double)
+
+?foo_pad@@YAXPAD at Z
+?foo_pad@@YAXPEAD at Z
+; CHECK: void __cdecl foo_pad(char *)
+
+?foo_pbd@@YAXPBD at Z
+?foo_pbd@@YAXPEBD at Z
+; CHECK: void __cdecl foo_pbd(char const *)
+
+?foo_pcd@@YAXPCD at Z
+?foo_pcd@@YAXPECD at Z
+; CHECK: void __cdecl foo_pcd(char volatile *)
+
+?foo_qad@@YAXQAD at Z
+?foo_qad@@YAXQEAD at Z
+; CHECK: void __cdecl foo_qad(char *const)
+
+?foo_rad@@YAXRAD at Z
+?foo_rad@@YAXREAD at Z
+; CHECK: void __cdecl foo_rad(char *volatile)
+
+?foo_sad@@YAXSAD at Z
+?foo_sad@@YAXSEAD at Z
+; CHECK: void __cdecl foo_sad(char *const volatile)
+
+?foo_piad@@YAXPIAD at Z
+?foo_piad@@YAXPEIAD at Z
+; CHECK: void __cdecl foo_piad(char *__restrict)
+
+?foo_qiad@@YAXQIAD at Z
+?foo_qiad@@YAXQEIAD at Z
+; CHECK: void __cdecl foo_qiad(char *const __restrict)
+
+?foo_riad@@YAXRIAD at Z
+?foo_riad@@YAXREIAD at Z
+; CHECK: void __cdecl foo_riad(char *volatile __restrict)
+
+?foo_siad@@YAXSIAD at Z
+?foo_siad@@YAXSEIAD at Z
+; CHECK: void __cdecl foo_siad(char *const volatile __restrict)
+
+?foo_papad@@YAXPAPAD at Z
+?foo_papad@@YAXPEAPEAD at Z
+; CHECK: void __cdecl foo_papad(char **)
+
+?foo_papbd@@YAXPAPBD at Z
+?foo_papbd@@YAXPEAPEBD at Z
+; CHECK: void __cdecl foo_papbd(char const **)
+
+?foo_papcd@@YAXPAPCD at Z
+?foo_papcd@@YAXPEAPECD at Z
+; CHECK: void __cdecl foo_papcd(char volatile **)
+
+?foo_pbqad@@YAXPBQAD at Z
+?foo_pbqad@@YAXPEBQEAD at Z
+; CHECK: void __cdecl foo_pbqad(char *const *)
+
+?foo_pcrad@@YAXPCRAD at Z
+?foo_pcrad@@YAXPECREAD at Z
+; CHECK: void __cdecl foo_pcrad(char *volatile *)
+
+?foo_qapad@@YAXQAPAD at Z
+?foo_qapad@@YAXQEAPEAD at Z
+; CHECK: void __cdecl foo_qapad(char **const)
+
+?foo_rapad@@YAXRAPAD at Z
+?foo_rapad@@YAXREAPEAD at Z
+; CHECK: void __cdecl foo_rapad(char **volatile)
+
+?foo_pbqbd@@YAXPBQBD at Z
+?foo_pbqbd@@YAXPEBQEBD at Z
+; CHECK: void __cdecl foo_pbqbd(char const *const *)
+
+?foo_pbqcd@@YAXPBQCD at Z
+?foo_pbqcd@@YAXPEBQECD at Z
+; CHECK: void __cdecl foo_pbqcd(char volatile *const *)
+
+?foo_pcrbd@@YAXPCRBD at Z
+?foo_pcrbd@@YAXPECREBD at Z
+; CHECK: void __cdecl foo_pcrbd(char const *volatile *)
+
+?foo_pcrcd@@YAXPCRCD at Z
+?foo_pcrcd@@YAXPECRECD at Z
+; CHECK: void __cdecl foo_pcrcd(char volatile *volatile *)
+
+?foo_aad@@YAXAAD at Z
+?foo_aad@@YAXAEAD at Z
+; CHECK: void __cdecl foo_aad(char &)
+
+?foo_abd@@YAXABD at Z
+?foo_abd@@YAXAEBD at Z
+; CHECK: void __cdecl foo_abd(char const &)
+
+?foo_aapad@@YAXAAPAD at Z
+?foo_aapad@@YAXAEAPEAD at Z
+; CHECK: void __cdecl foo_aapad(char *&)
+
+?foo_aapbd@@YAXAAPBD at Z
+?foo_aapbd@@YAXAEAPEBD at Z
+; CHECK: void __cdecl foo_aapbd(char const *&)
+
+?foo_abqad@@YAXABQAD at Z
+?foo_abqad@@YAXAEBQEAD at Z
+; CHECK: void __cdecl foo_abqad(char *const &)
+
+?foo_abqbd@@YAXABQBD at Z
+?foo_abqbd@@YAXAEBQEBD at Z
+; CHECK: void __cdecl foo_abqbd(char const *const &)
+
+?foo_aay144h@@YAXAAY144H at Z
+?foo_aay144h@@YAXAEAY144H at Z
+; CHECK: void __cdecl foo_aay144h(int (&)[5][5])
+
+?foo_aay144cbh@@YAXAAY144$$CBH at Z
+?foo_aay144cbh@@YAXAEAY144$$CBH at Z
+; CHECK: void __cdecl foo_aay144cbh(int const (&)[5][5])
+
+; FIXME: We don't support rvalue references yet
+; ?foo_qay144h@@YAX$$QAY144H at Z
+; ?foo_qay144h@@YAX$$QEAY144H at Z
+; FIXME: void __cdecl foo_qay144h(int (&&)[5][5])
+
+; FIXME: We don't support rvalue references yet
+; ?foo_qay144cbh@@YAX$$QAY144$$CBH at Z
+; ?foo_qay144cbh@@YAX$$QEAY144$$CBH at Z
+; FIXME: void __cdecl foo_qay144cbh(int const (&&)[5][5])
+
+?foo_p6ahxz@@YAXP6AHXZ at Z
+?foo_p6ahxz@@YAXP6AHXZ at Z
+; CHECK: void __cdecl foo_p6ahxz(int __cdecl (*)(void))
+
+?foo_a6ahxz@@YAXA6AHXZ at Z
+?foo_a6ahxz@@YAXA6AHXZ at Z
+; CHECK: void __cdecl foo_a6ahxz(int __cdecl (&)(void))
+
+; FIXME: We don't support rvalue references yet
+; ?foo_q6ahxz@@YAX$$Q6AHXZ at Z
+; ?foo_q6ahxz@@YAX$$Q6AHXZ at Z
+; FIXME: void __cdecl foo_q6ahxz(int __cdecl (&&)(void))
+
+?foo_qay04h@@YAXQAY04H at Z
+?foo_qay04h@@YAXQEAY04H at Z
+; CHECK: void __cdecl foo_qay04h(int (*const)[5])
+
+?foo_qay04cbh@@YAXQAY04$$CBH at Z
+?foo_qay04cbh@@YAXQEAY04$$CBH at Z
+; CHECK: void __cdecl foo_qay04cbh(int const (*const)[5])
+
+?foo@@YAXPAY02N at Z
+?foo@@YAXPEAY02N at Z
+; CHECK: void __cdecl foo(double (*)[3])
+
+?foo@@YAXQAN at Z
+?foo@@YAXQEAN at Z
+; CHECK: void __cdecl foo(double *const)
+
+?foo_const@@YAXQBN at Z
+?foo_const@@YAXQEBN at Z
+; CHECK: void __cdecl foo_const(double const *const)
+
+?foo_volatile@@YAXQCN at Z
+?foo_volatile@@YAXQECN at Z
+; CHECK: void __cdecl foo_volatile(double volatile *const)
+
+?foo@@YAXPAY02NQBNN at Z
+?foo@@YAXPEAY02NQEBNN at Z
+; CHECK: void __cdecl foo(double (*)[3], double const *const, double)
+
+?foo_fnptrconst@@YAXP6AXQAH at Z@Z
+?foo_fnptrconst@@YAXP6AXQEAH at Z@Z
+; CHECK: void __cdecl foo_fnptrconst(void __cdecl (*)(int *const))
+
+?foo_fnptrarray@@YAXP6AXQAH at Z@Z
+?foo_fnptrarray@@YAXP6AXQEAH at Z@Z
+; CHECK: void __cdecl foo_fnptrarray(void __cdecl (*)(int *const))
+
+; ?foo_fnptrbackref1@@YAXP6AXQAH at Z1@Z
+; ?foo_fnptrbackref1@@YAXP6AXQEAH at Z1@Z
+; FIXME: void __cdecl foo_fnptrbackref1(void __cdecl (*)(int *const), void __cdecl (*)(int *const))
+
+; ?foo_fnptrbackref2@@YAXP6AXQAH at Z1@Z
+; ?foo_fnptrbackref2@@YAXP6AXQEAH at Z1@Z
+; FIXME: void __cdecl foo_fnptrbackref2(void __cdecl (*)(int *const), void __cdecl (*)(int *const))
+
+; ?foo_fnptrbackref3@@YAXP6AXQAH at Z1@Z
+; ?foo_fnptrbackref3@@YAXP6AXQEAH at Z1@Z
+; FIXME: void __cdecl foo_fnptrbackref3(void (*)(int *const), void (*)(int *))
+
+; ?foo_fnptrbackref4@@YAXP6AXPAH at Z1@Z
+; ?foo_fnptrbackref4@@YAXP6AXPEAH at Z1@Z
+; FIXME: void __cdecl foo_fnptrbackref4(void (*)(int *), void (*)(int *const))
+
+?ret_fnptrarray@@YAP6AXQAH at ZXZ
+?ret_fnptrarray@@YAP6AXQEAH at ZXZ
+; CHECK: void __cdecl (* __cdecl ret_fnptrarray(void))(int *const)
+
+; The first argument gets mangled as-if it were written int *const
+; The second arg should not form a backref because it isn't qualified
+?mangle_no_backref0@@YAXQAHPAH at Z
+?mangle_no_backref0@@YAXQEAHPEAH at Z
+; CHECK: void __cdecl mangle_no_backref0(int *const, int *)
+
+?mangle_no_backref1@@YAXQAHQAH at Z
+?mangle_no_backref1@@YAXQEAHQEAH at Z
+; CHECK: void __cdecl mangle_no_backref1(int *const, int *const)
+
+; Pointer to function types don't backref with function types
+?mangle_no_backref2@@YAXP6AXXZP6AXXZ at Z
+?mangle_no_backref2@@YAXP6AXXZP6AXXZ at Z
+; CHECK: void __cdecl mangle_no_backref2(void __cdecl (*)(void), void __cdecl (*)(void))
+
+?mangle_yes_backref0@@YAXQAH0 at Z
+?mangle_yes_backref0@@YAXQEAH0 at Z
+; CHECK: void __cdecl mangle_yes_backref0(int *const, int *const)
+
+?mangle_yes_backref1@@YAXQAH0 at Z
+?mangle_yes_backref1@@YAXQEAH0 at Z
+; CHECK: void __cdecl mangle_yes_backref1(int *const, int *const)
+
+?mangle_yes_backref2@@YAXQBQ6AXXZ0 at Z
+?mangle_yes_backref2@@YAXQEBQ6AXXZ0 at Z
+; CHECK: void __cdecl mangle_yes_backref2(void __cdecl (*const *const)(void), void __cdecl (*const *const)(void))
+
+?mangle_yes_backref3@@YAXQAP6AXXZ0 at Z
+?mangle_yes_backref3@@YAXQEAP6AXXZ0 at Z
+; CHECK: void __cdecl mangle_yes_backref3(void __cdecl (**const)(void), void __cdecl (**const)(void))
+
+?mangle_yes_backref4@@YAXQIAH0 at Z
+?mangle_yes_backref4@@YAXQEIAH0 at Z
+; CHECK: void __cdecl mangle_yes_backref4(int *const __restrict, int *const __restrict)
+
+?pr23325@@YAXQBUS@@0 at Z
+?pr23325@@YAXQEBUS@@0 at Z
+; CHECK: void __cdecl pr23325(struct S const *const, struct S const *const)
+
+; ?vla_arg@@YAXHQAY0A at H@Z
+; ?vla_arg@@YAXHQEAY0A at H@Z
+; FIXME: void __cdecl vla_arg(int i, int (*const)[0])

Modified: llvm/trunk/test/Demangle/ms-mangle.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Demangle/ms-mangle.test?rev=338067&r1=338066&r2=338067&view=diff
==============================================================================
--- llvm/trunk/test/Demangle/ms-mangle.test (original)
+++ llvm/trunk/test/Demangle/ms-mangle.test Thu Jul 26 13:25:35 2018
@@ -82,10 +82,10 @@
 ; CHECK: int const *const h2
 
 ?h3@@3QIAHIA
-; CHECK: int * __restrict const h3
+; CHECK: int *const __restrict h3
 
 ?h3@@3QEIAHEIA
-; CHECK: int * __restrict const h3
+; CHECK: int *const __restrict h3
 
 ?i@@3PAY0BE at HA
 ; CHECK: int (*i)[20]




More information about the llvm-commits mailing list