[PATCH] D142713: [clang][ASTImporter] Propagate TemplateArgument::IsDefaulted during import
Michael Buch via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 27 06:13:20 PST 2023
Michael137 created this revision.
Michael137 added reviewers: martong, aprantl.
Herald added a subscriber: rnkovacs.
Herald added a reviewer: a.sidorin.
Herald added a reviewer: shafik.
Herald added a project: All.
Michael137 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
With https://reviews.llvm.org/D141826 `TemplateArgument`s have an
additional field that indicates their defaulted-ness. This gets
used during debug-info generation and in the `clang::TypePrinter`.
This patch copies the field during the import process so consumers
of the ASTImporter can benefit from the other Clang components that
read the field.
**Testing**
- Added unit-test
- Checked that this fixes (in addition to a follow-up LLDB patch) fix current test failures in LLDB
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D142713
Files:
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp
Index: clang/unittests/AST/ASTImporterTest.cpp
===================================================================
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1158,6 +1158,25 @@
ASSERT_EQ(cast<IntegerLiteral>(ToArg)->getValue().getLimitedValue(), 1U);
}
+TEST_P(ASTImporterOptionSpecificTestBase, TemplateArgumentsDefaulted) {
+ Decl *FromTU = getTuDecl(R"(
+ template<typename T> struct X {};
+ template<typename TP = double,
+ int NTTP = 50,
+ template<typename> typename TT = X> struct S {};
+ S<> s;
+ )", Lang_CXX17);
+ auto *FromSpec = FirstDeclMatcher<ClassTemplateSpecializationDecl>().match(
+ FromTU, classTemplateSpecializationDecl(hasName("S")));
+ ASSERT_TRUE(FromSpec);
+ auto *ToSpec = Import(FromSpec, Lang_CXX03);
+ ASSERT_TRUE(ToSpec);
+ auto const& TList = ToSpec->getTemplateArgs();
+ for (auto const& Arg : TList.asArray()) {
+ ASSERT_TRUE(Arg.getIsDefaulted());
+ }
+}
+
TEST_P(ASTImporterOptionSpecificTestBase,
ImportOfTemplatedDeclOfClassTemplateDecl) {
Decl *FromTU = getTuDecl("template<class X> struct S{};", Lang_CXX03);
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -836,7 +836,7 @@
ExpectedType ToTypeOrErr = import(From.getAsType());
if (!ToTypeOrErr)
return ToTypeOrErr.takeError();
- return TemplateArgument(*ToTypeOrErr);
+ return TemplateArgument(*ToTypeOrErr, /*isNullPtr*/false, From.getIsDefaulted());
}
case TemplateArgument::Integral: {
@@ -853,14 +853,14 @@
ExpectedType ToTypeOrErr = import(From.getParamTypeForDecl());
if (!ToTypeOrErr)
return ToTypeOrErr.takeError();
- return TemplateArgument(*ToOrErr, *ToTypeOrErr);
+ return TemplateArgument(*ToOrErr, *ToTypeOrErr, From.getIsDefaulted());
}
case TemplateArgument::NullPtr: {
ExpectedType ToTypeOrErr = import(From.getNullPtrType());
if (!ToTypeOrErr)
return ToTypeOrErr.takeError();
- return TemplateArgument(*ToTypeOrErr, /*isNullPtr*/true);
+ return TemplateArgument(*ToTypeOrErr, /*isNullPtr*/true, From.getIsDefaulted());
}
case TemplateArgument::Template: {
@@ -868,7 +868,7 @@
if (!ToTemplateOrErr)
return ToTemplateOrErr.takeError();
- return TemplateArgument(*ToTemplateOrErr);
+ return TemplateArgument(*ToTemplateOrErr, From.getIsDefaulted());
}
case TemplateArgument::TemplateExpansion: {
@@ -878,12 +878,12 @@
return ToTemplateOrErr.takeError();
return TemplateArgument(
- *ToTemplateOrErr, From.getNumTemplateExpansions());
+ *ToTemplateOrErr, From.getNumTemplateExpansions(), From.getIsDefaulted());
}
case TemplateArgument::Expression:
if (ExpectedExpr ToExpr = import(From.getAsExpr()))
- return TemplateArgument(*ToExpr);
+ return TemplateArgument(*ToExpr, From.getIsDefaulted());
else
return ToExpr.takeError();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D142713.492727.patch
Type: text/x-patch
Size: 3201 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230127/0054f214/attachment-0001.bin>
More information about the cfe-commits
mailing list