This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG8f80c66bd298: [clang] Fix a crash when CTAD fails (authored by kadircet).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D99145/new/ https://reviews.llvm.org/D99145 Files: clang/lib/Sema/SemaChecking.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 @@ -543,6 +543,18 @@ int m = n<int>; } +// Ensure we don't crash when CTAD fails. +template <typename T1, typename T2> +struct Foo { // expected-note{{candidate function template not viable}} + Foo(T1, T2); // expected-note{{candidate function template not viable}} +}; + +template <typename... Args> +void insert(Args &&...args); + +void foo() { + insert(Foo(2, 2, 2)); // expected-error{{no viable constructor or deduction guide}} +} #else // expected-no-diagnostics Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -4492,7 +4492,8 @@ // Find expected alignment, and the actual alignment of the passed object. // getTypeAlignInChars requires complete types - if (ParamTy->isIncompleteType() || ArgTy->isIncompleteType()) + if (ParamTy->isIncompleteType() || ArgTy->isIncompleteType() || + ParamTy->isUndeducedType() || ArgTy->isUndeducedType()) return; CharUnits ParamAlign = Context.getTypeAlignInChars(ParamTy);
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 @@ -543,6 +543,18 @@ int m = n<int>; } +// Ensure we don't crash when CTAD fails. +template <typename T1, typename T2> +struct Foo { // expected-note{{candidate function template not viable}} + Foo(T1, T2); // expected-note{{candidate function template not viable}} +}; + +template <typename... Args> +void insert(Args &&...args); + +void foo() { + insert(Foo(2, 2, 2)); // expected-error{{no viable constructor or deduction guide}} +} #else // expected-no-diagnostics Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -4492,7 +4492,8 @@ // Find expected alignment, and the actual alignment of the passed object. // getTypeAlignInChars requires complete types - if (ParamTy->isIncompleteType() || ArgTy->isIncompleteType()) + if (ParamTy->isIncompleteType() || ArgTy->isIncompleteType() || + ParamTy->isUndeducedType() || ArgTy->isUndeducedType()) return; CharUnits ParamAlign = Context.getTypeAlignInChars(ParamTy);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits