[clang] [clang][ASTImporter][test] Add test for importing explicit object parameter (PR #124305)
Balázs Kéri via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 24 09:18:57 PST 2025
================
@@ -3441,13 +3441,33 @@ TEST_P(ASTImporterOptionSpecificTestBase, ImportParmVarDecl) {
ASSERT_TRUE(FromVar);
ASSERT_TRUE(FromVar->hasUninstantiatedDefaultArg());
ASSERT_TRUE(FromVar->getUninstantiatedDefaultArg());
+ ASSERT_FALSE(FromVar->isExplicitObjectParameter());
const auto *ToVar = Import(FromVar, Lang_CXX11);
EXPECT_TRUE(ToVar);
EXPECT_TRUE(ToVar->hasUninstantiatedDefaultArg());
EXPECT_TRUE(ToVar->getUninstantiatedDefaultArg());
EXPECT_NE(FromVar->getUninstantiatedDefaultArg(),
ToVar->getUninstantiatedDefaultArg());
+ EXPECT_FALSE(ToVar->isExplicitObjectParameter());
+}
+
+TEST_P(ASTImporterOptionSpecificTestBase, ImportParmVarDecl_Explicit) {
+ const auto *Code = R"(
+ struct Wrapper {
+ void func(this Wrapper) {}
+ };
+ )";
+ Decl *FromTU = getTuDecl(Code, Lang_CXX23);
+ auto *FromVar = FirstDeclMatcher<ParmVarDecl>().match(FromTU, parmVarDecl());
+ ASSERT_TRUE(FromVar);
+ ASSERT_TRUE(FromVar->isExplicitObjectParameter());
+
+ const auto *ToVar = Import(FromVar, Lang_CXX23);
+ EXPECT_TRUE(ToVar);
+ EXPECT_TRUE(ToVar->isExplicitObjectParameter());
+ EXPECT_EQ(ToVar->getExplicitObjectParamThisLoc(),
+ FromVar->getExplicitObjectParamThisLoc());
----------------
balazske wrote:
It looks not correct to copy a `SourceLocation` from the "from" into the "to" context. They have a different source manager instance. Function [ASTNodeImporter::ImportDefaultArgOfParmVarDecl](https://clang.llvm.org/doxygen/classclang_1_1ASTNodeImporter.html#af363fc3da4121fce19f9a96e9e0b64fa) is the place where this is done. Copy of `getExplicitObjectParamThisLoc` should be replaced with normal import.
https://github.com/llvm/llvm-project/pull/124305
More information about the cfe-commits
mailing list