jcsxky wrote: > The `VisitTypeAliasTemplateDecl` function should be re-designed to check for > structural equivalence at import. The following test does not pass because an > existing `TypeAliasTemplateDecl` declaration with the same name is always > found and returned, without check for structural equivalence. > > ``` > TEST_P(ASTImporterOptionSpecificTestBase, ImportTypeAliasTemplateDecl1) { > const char *ToCode = > R"( > struct S; > template <typename, typename> > using Callable = S; > )"; > const char *Code = > R"( > struct S; > template <typename> > using Callable = S; > )"; > Decl *ToTU = getToTuDecl(ToCode, Lang_CXX17); > Decl *FromTU = getTuDecl(Code, Lang_CXX17); > > auto *FromCallable = FirstDeclMatcher<TypeAliasTemplateDecl>().match( > FromTU, typeAliasTemplateDecl(hasName("Callable"))); > > auto *ToCallable = FirstDeclMatcher<TypeAliasTemplateDecl>().match( > ToTU, typeAliasTemplateDecl(hasName("Callable"))); > > auto *ImportedCallable = Import(FromCallable, Lang_CXX17); > EXPECT_TRUE(ImportedCallable); > EXPECT_NE(ImportedCallable, ToCallable); > } > ``` > > Additionally I discovered that import of `ClassTemplateDecl` is not correct > too: If there is an object with the same name that is not a > `ClassTemplateDecl`, it is just ignored at import. This is not correct, the > existing object may cause name conflict (for example it can be a non-template > `RecordDecl`). (I found this when checking the questions in my last comment.) > This is an independent problem but should be fixed.
Is import of `Callable` should be failed? I compiled this code ```cpp struct S; template <typename, typename> using Callable = S; template <typename> using Callable = S; ``` and clang report an error. https://github.com/llvm/llvm-project/pull/74919 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits