erik.pilkington created this revision. erik.pilkington added reviewers: rsmith, rjmccall. Herald added a subscriber: dexonsmith.
Only apply this exception on a type that we're able to check. Thanks! Erik Repository: rC Clang https://reviews.llvm.org/D49868 Files: clang/lib/Sema/SemaInit.cpp clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Index: clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp =================================================================== --- clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp +++ clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp @@ -348,6 +348,20 @@ }; } +namespace rdar41903969 { +template <class T> struct A {}; +template <class T> struct B; +template <class T> struct C { + C(A<T>&); + C(B<T>&); +}; + +void foo(A<int> &a, B<int> &b) { + (void)C{b}; + (void)C{a}; +} +} + #else // expected-no-diagnostics Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -9130,6 +9130,7 @@ Expr *E = ListInit->getInit(0); auto *RD = E->getType()->getAsCXXRecordDecl(); if (!isa<InitListExpr>(E) && RD && + isCompleteType(Kind.getLocation(), E->getType()) && isOrIsDerivedFromSpecializationOf(RD, Template)) TryListConstructors = false; }
Index: clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp =================================================================== --- clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp +++ clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp @@ -348,6 +348,20 @@ }; } +namespace rdar41903969 { +template <class T> struct A {}; +template <class T> struct B; +template <class T> struct C { + C(A<T>&); + C(B<T>&); +}; + +void foo(A<int> &a, B<int> &b) { + (void)C{b}; + (void)C{a}; +} +} + #else // expected-no-diagnostics Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -9130,6 +9130,7 @@ Expr *E = ListInit->getInit(0); auto *RD = E->getType()->getAsCXXRecordDecl(); if (!isa<InitListExpr>(E) && RD && + isCompleteType(Kind.getLocation(), E->getType()) && isOrIsDerivedFromSpecializationOf(RD, Template)) TryListConstructors = false; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits