[PATCH] D59387: Make getFullyQualifiedName qualify both the pointee and class type for member ptr types
Benjamin Kramer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 14 14:32:27 PDT 2019
bkramer created this revision.
bkramer added reviewers: saugustine, ilya-biryukov.
Herald added a subscriber: jlebar.
Herald added a project: clang.
We already handle pointers and references, member ptrs are just another
special case. Fixes PR40732.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D59387
Files:
clang/lib/AST/QualTypeNames.cpp
clang/unittests/Tooling/QualTypeNamesTest.cpp
Index: clang/unittests/Tooling/QualTypeNamesTest.cpp
===================================================================
--- clang/unittests/Tooling/QualTypeNamesTest.cpp
+++ clang/unittests/Tooling/QualTypeNamesTest.cpp
@@ -194,6 +194,7 @@
GlobalNsPrefix.ExpectedQualTypeNames["ZVal"] = "::A::B::Y::Z";
GlobalNsPrefix.ExpectedQualTypeNames["GlobalZVal"] = "::Z";
GlobalNsPrefix.ExpectedQualTypeNames["CheckK"] = "D::aStruct";
+ GlobalNsPrefix.ExpectedQualTypeNames["YZMPtr"] = "::A::B::X ::A::B::Y::Z::*";
GlobalNsPrefix.runOver(
"namespace A {\n"
" namespace B {\n"
@@ -205,8 +206,9 @@
" template <typename T>\n"
" using Alias = CCC<T>;\n"
" Alias<int> IntAliasVal;\n"
- " struct Y { struct Z {}; };\n"
+ " struct Y { struct Z { X YZIPtr; }; };\n"
" Y::Z ZVal;\n"
+ " X Y::Z::*YZMPtr;\n"
" }\n"
"}\n"
"struct Z {};\n"
Index: clang/lib/AST/QualTypeNames.cpp
===================================================================
--- clang/lib/AST/QualTypeNames.cpp
+++ clang/lib/AST/QualTypeNames.cpp
@@ -379,6 +379,19 @@
return QT;
}
+ if (auto *MemberPT = dyn_cast<MemberPointerType>(QT.getTypePtr())) {
+ // Get the qualifiers.
+ Qualifiers Quals = QT.getQualifiers();
+ // Fully qualify the pointee and class types.
+ QT = getFullyQualifiedType(QT->getPointeeType(), Ctx, WithGlobalNsPrefix);
+ QualType Class = getFullyQualifiedType(QualType(MemberPT->getClass(), 0),
+ Ctx, WithGlobalNsPrefix);
+ QT = Ctx.getMemberPointerType(QT, Class.getTypePtr());
+ // Add back the qualifiers.
+ QT = Ctx.getQualifiedType(QT, Quals);
+ return QT;
+ }
+
// In case of myType& we need to strip the reference first, fully
// qualify and attach the reference once again.
if (isa<ReferenceType>(QT.getTypePtr())) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59387.190730.patch
Type: text/x-patch
Size: 1906 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190314/1b72a5af/attachment.bin>
More information about the cfe-commits
mailing list