[clang] [Clang][Sema] Check null after ExtractTypeForDeductionGuide (PR #165776)
Qiu Chaofan via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 30 13:19:01 PDT 2025
https://github.com/ecnelises created https://github.com/llvm/llvm-project/pull/165776
Fixes #165560
>From c9a426b0594865770e46a801fc9b4abbdd9a475e Mon Sep 17 00:00:00 2001
From: Qiu Chaofan <qcf at ecnelises.com>
Date: Thu, 30 Oct 2025 13:12:25 -0700
Subject: [PATCH] [Clang][Sema] Check null after ExtractTypeForDeductionGuide
---
clang/lib/Sema/SemaTemplateDeductionGuide.cpp | 3 ++-
clang/test/SemaTemplate/ctad.cpp | 12 ++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Sema/SemaTemplateDeductionGuide.cpp b/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
index ad50600f6399c..bfcd3978817ca 100644
--- a/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
+++ b/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
@@ -659,7 +659,8 @@ struct ConvertConstructorToDeductionGuideTransform {
SemaRef, MaterializedTypedefs, NestedPattern,
TransformingOuterPatterns ? &Args : nullptr)
.transform(NewDI);
-
+ if (!NewDI)
+ return nullptr;
// Resolving a wording defect, we also inherit default arguments from the
// constructor.
ExprResult NewDefArg;
diff --git a/clang/test/SemaTemplate/ctad.cpp b/clang/test/SemaTemplate/ctad.cpp
index 1a575ea527006..60603f0c963a5 100644
--- a/clang/test/SemaTemplate/ctad.cpp
+++ b/clang/test/SemaTemplate/ctad.cpp
@@ -104,3 +104,15 @@ namespace ConvertDeducedTemplateArgument {
auto x = C(D<A::B>());
}
+
+namespace pr165560 {
+template <class T, class> struct S {
+ using A = T;
+ template <class> struct I { // expected-note{{candidate function template not viable: requires 1 argument, but 0 were provided}} \
+ // expected-note{{implicit deduction guide declared as 'template <class> I(pr165560::S<int, int>::I<type-parameter-0-0>) -> pr165560::S<int, int>::I<type-parameter-0-0>'}}
+ I(typename A::F) {} // expected-error{{type 'A' (aka 'int') cannot be used prior to '::' because it has no members}}
+ };
+};
+S<int, int>::I i; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'S<int, int>::I'}} \
+ // expected-note{{while building implicit deduction guide first needed here}}
+}
More information about the cfe-commits
mailing list