This revision was automatically updated to reflect the committed changes. Closed by commit rGf6cdb2c0a714: [clang][ASTImporter] Add import of DeducedTemplateSpecializationType. (authored by balazske).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D99188/new/ https://reviews.llvm.org/D99188 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 @@ -631,6 +631,15 @@ fieldDecl(hasType(dependentTemplateSpecializationType()))))))); } +TEST_P(ImportType, ImportDeducedTemplateSpecialization) { + MatchVerifier<Decl> Verifier; + testImport("template <typename T>" + "class C { public: C(T); };" + "C declToImport(123);", + Lang_CXX17, "", Lang_CXX17, Verifier, + varDecl(hasType(deducedTemplateSpecializationType()))); +} + const internal::VariadicDynCastAllOfMatcher<Stmt, SizeOfPackExpr> sizeOfPackExpr; Index: clang/lib/AST/ASTImporter.cpp =================================================================== --- clang/lib/AST/ASTImporter.cpp +++ clang/lib/AST/ASTImporter.cpp @@ -358,6 +358,8 @@ ExpectedType VisitDecltypeType(const DecltypeType *T); ExpectedType VisitUnaryTransformType(const UnaryTransformType *T); ExpectedType VisitAutoType(const AutoType *T); + ExpectedType VisitDeducedTemplateSpecializationType( + const DeducedTemplateSpecializationType *T); ExpectedType VisitInjectedClassNameType(const InjectedClassNameType *T); // FIXME: DependentDecltypeType ExpectedType VisitRecordType(const RecordType *T); @@ -1376,6 +1378,20 @@ ToTemplateArgs); } +ExpectedType ASTNodeImporter::VisitDeducedTemplateSpecializationType( + const DeducedTemplateSpecializationType *T) { + // FIXME: Make sure that the "to" context supports C++17! + Expected<TemplateName> ToTemplateNameOrErr = import(T->getTemplateName()); + if (!ToTemplateNameOrErr) + return ToTemplateNameOrErr.takeError(); + ExpectedType ToDeducedTypeOrErr = import(T->getDeducedType()); + if (!ToDeducedTypeOrErr) + return ToDeducedTypeOrErr.takeError(); + + return Importer.getToContext().getDeducedTemplateSpecializationType( + *ToTemplateNameOrErr, *ToDeducedTypeOrErr, T->isDependentType()); +} + ExpectedType ASTNodeImporter::VisitInjectedClassNameType( const InjectedClassNameType *T) { Expected<CXXRecordDecl *> ToDeclOrErr = import(T->getDecl());
Index: clang/unittests/AST/ASTImporterTest.cpp =================================================================== --- clang/unittests/AST/ASTImporterTest.cpp +++ clang/unittests/AST/ASTImporterTest.cpp @@ -631,6 +631,15 @@ fieldDecl(hasType(dependentTemplateSpecializationType()))))))); } +TEST_P(ImportType, ImportDeducedTemplateSpecialization) { + MatchVerifier<Decl> Verifier; + testImport("template <typename T>" + "class C { public: C(T); };" + "C declToImport(123);", + Lang_CXX17, "", Lang_CXX17, Verifier, + varDecl(hasType(deducedTemplateSpecializationType()))); +} + const internal::VariadicDynCastAllOfMatcher<Stmt, SizeOfPackExpr> sizeOfPackExpr; Index: clang/lib/AST/ASTImporter.cpp =================================================================== --- clang/lib/AST/ASTImporter.cpp +++ clang/lib/AST/ASTImporter.cpp @@ -358,6 +358,8 @@ ExpectedType VisitDecltypeType(const DecltypeType *T); ExpectedType VisitUnaryTransformType(const UnaryTransformType *T); ExpectedType VisitAutoType(const AutoType *T); + ExpectedType VisitDeducedTemplateSpecializationType( + const DeducedTemplateSpecializationType *T); ExpectedType VisitInjectedClassNameType(const InjectedClassNameType *T); // FIXME: DependentDecltypeType ExpectedType VisitRecordType(const RecordType *T); @@ -1376,6 +1378,20 @@ ToTemplateArgs); } +ExpectedType ASTNodeImporter::VisitDeducedTemplateSpecializationType( + const DeducedTemplateSpecializationType *T) { + // FIXME: Make sure that the "to" context supports C++17! + Expected<TemplateName> ToTemplateNameOrErr = import(T->getTemplateName()); + if (!ToTemplateNameOrErr) + return ToTemplateNameOrErr.takeError(); + ExpectedType ToDeducedTypeOrErr = import(T->getDeducedType()); + if (!ToDeducedTypeOrErr) + return ToDeducedTypeOrErr.takeError(); + + return Importer.getToContext().getDeducedTemplateSpecializationType( + *ToTemplateNameOrErr, *ToDeducedTypeOrErr, T->isDependentType()); +} + ExpectedType ASTNodeImporter::VisitInjectedClassNameType( const InjectedClassNameType *T) { Expected<CXXRecordDecl *> ToDeclOrErr = import(T->getDecl());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits