[PATCH] D105551: [libTooling] Add support for implicit `this` to `buildAddressOf`.
Yitzhak Mandelbaum via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 7 07:28:32 PDT 2021
ymandel created this revision.
ymandel added a reviewer: tdl-g.
ymandel requested review of this revision.
Herald added a project: clang.
Changes `buildAddressOf` to return `this` when given an implicit `this` expression.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D105551
Files:
clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
clang/unittests/Tooling/SourceCodeBuildersTest.cpp
Index: clang/unittests/Tooling/SourceCodeBuildersTest.cpp
===================================================================
--- clang/unittests/Tooling/SourceCodeBuildersTest.cpp
+++ clang/unittests/Tooling/SourceCodeBuildersTest.cpp
@@ -172,6 +172,24 @@
testBuilder(buildAddressOf, "S x; x + x;", "&(x + x)");
}
+TEST(SourceCodeBuildersTest, BuildAddressOfImplicitThis) {
+ StringRef Snippet = R"cc(
+ struct Struct {
+ void foo() {}
+ void bar() {
+ foo();
+ }
+ };
+ )cc";
+ auto StmtMatch = matchStmt(
+ Snippet,
+ cxxMemberCallExpr(onImplicitObjectArgument(cxxThisExpr().bind("expr"))));
+ ASSERT_TRUE(StmtMatch);
+ EXPECT_THAT(buildAddressOf(*StmtMatch->Result.Nodes.getNodeAs<Expr>("expr"),
+ *StmtMatch->Result.Context),
+ ValueIs(std::string("this")));
+}
+
TEST(SourceCodeBuildersTest, BuildDereferencePointer) {
testBuilder(buildDereference, "S *x; x;", "*x");
}
Index: clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
===================================================================
--- clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
+++ clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
@@ -93,6 +93,8 @@
llvm::Optional<std::string> tooling::buildAddressOf(const Expr &E,
const ASTContext &Context) {
+ if (E.isImplicitCXXThis())
+ return std::string("this");
if (const auto *Op = dyn_cast<UnaryOperator>(&E))
if (Op->getOpcode() == UO_Deref) {
// Strip leading '*'.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D105551.356949.patch
Type: text/x-patch
Size: 1568 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210707/27f77cdf/attachment-0001.bin>
More information about the cfe-commits
mailing list