]> granicus.if.org Git - clang/commitdiff
[MS] Pass CVRU qualifiers properly in Itanium mangler
authorReid Kleckner <rnk@google.com>
Thu, 8 Mar 2018 00:55:09 +0000 (00:55 +0000)
committerReid Kleckner <rnk@google.com>
Thu, 8 Mar 2018 00:55:09 +0000 (00:55 +0000)
We already have a mangling for the __unaligned qualifier, we just have
to call Qualifiers::getFromCVRUMask instead of getFromCVRMask.

PR36638

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@326971 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ItaniumMangle.cpp
test/CodeGenCXX/pr33080.cpp

index d6d3792b6af3f7458b1b87b47cd2586c5d7ae5e0..3a7b34d271eaff90819615fb931384c58f9e30bf 100644 (file)
@@ -2688,7 +2688,7 @@ void CXXNameMangler::mangleType(const FunctionProtoType *T) {
 
   // Mangle CV-qualifiers, if present.  These are 'this' qualifiers,
   // e.g. "const" in "int (A::*)() const".
-  mangleQualifiers(Qualifiers::fromCVRMask(T->getTypeQuals()));
+  mangleQualifiers(Qualifiers::fromCVRUMask(T->getTypeQuals()));
 
   // Mangle instantiation-dependent exception-specification, if present,
   // per cxx-abi-dev proposal on 2016-10-11.
index 782327ec23fe9691ee84e1d71853baee4c386de4..bae47cc2e0686da47f3c61a7e66ad3bed0d8555a 100644 (file)
@@ -21,6 +21,10 @@ void hb(__unaligned struct A *, __unaligned const struct A *) {}
 void ja(__unaligned struct A *, __unaligned struct A *__unaligned *, __unaligned struct A *__unaligned *__unaligned *) {}
 // CHECK: define {{(dso_local )?}}void @_Z2jaPU11__unaligned1APU11__unalignedS1_PU11__unalignedS3_(
 
+struct A;
+void memptr(void (A::*a)(int) __unaligned) {}
+// CHECK: define {{.*}} @_Z6memptrM1AU11__unalignedFviE(
+
 void jb(__unaligned struct A *, __unaligned struct A **, __unaligned struct A *__unaligned *__unaligned *) {}
 // CHECK: @_Z2jbPU11__unaligned1APS1_PU11__unalignedPU11__unalignedS1_(