================ @@ -10088,9 +10088,13 @@ static bool allowAmbiguity(ASTContext &Context, const FunctionDecl *F1, const FunctionDecl *F2) { if (declaresSameEntity(F1, F2)) return true; - if (F1->isTemplateInstantiation() && F2->isTemplateInstantiation() && - declaresSameEntity(F1->getPrimaryTemplate(), F2->getPrimaryTemplate())) { - return true; + if (F1->isTemplateInstantiation() && F2->isTemplateInstantiation()) { + auto PT1 = F1->getPrimaryTemplate(); + auto PT2 = F2->getPrimaryTemplate(); + if (declaresSameEntity(PT1, PT2) || ---------------- ilya-biryukov wrote:
I missed that `getInstantiatedFromMemberTemplate` will be null for non-member template function instantiations. So I guess we still need it. Could we add a test with two non-member templates that do **not** match each other and check the ambiguity is still there? ``` template <class T> bool operator ==(Foo<T>, Foo<T*>); template <class T> bool operator ==(Foo<T*>, Foo<T>); Foo<int*>() == Foo<int*>; ``` Because it's weird that `declaresSameEntity(nullptr, nullptr)` returns `false`, I'm worried that we miss a point where someone changes it to return `true` and we would get `declaresSameEntity(primary-template-1, primary-template-2) || true /*declaresSameEntity(null, null)*/` and start turning real ambiguities to warnings accidentally. It's useful to have a test that explicitly guards against that. https://github.com/llvm/llvm-project/pull/72213 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits