[clang] 73feab5 - [clang] fix getTrivialTemplateArgumentLoc template template argument (#153344)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 12 22:09:12 PDT 2025
Author: Matheus Izvekov
Date: 2025-08-13T02:09:08-03:00
New Revision: 73feab502e5e9d6d32c1987d71e3da7f9f70a1f0
URL: https://github.com/llvm/llvm-project/commit/73feab502e5e9d6d32c1987d71e3da7f9f70a1f0
DIFF: https://github.com/llvm/llvm-project/commit/73feab502e5e9d6d32c1987d71e3da7f9f70a1f0.diff
LOG: [clang] fix getTrivialTemplateArgumentLoc template template argument (#153344)
This fixes a regression reported here
https://github.com/llvm/llvm-project/pull/147835#issuecomment-3181811371,
where getTrivialTemplateArgumentLoc can't see through template name
sugar when producing a trivial TemplateArgumentLoc for template template
arguments.
Since this regression was never released, there are no release notes.
Added:
Modified:
clang/lib/Sema/SemaTemplateDeduction.cpp
clang/test/SemaTemplate/ctad.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 3aa808e165bb6..477f8c7541939 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -2911,11 +2911,7 @@ Sema::getTrivialTemplateArgumentLoc(const TemplateArgument &Arg,
case TemplateArgument::TemplateExpansion: {
NestedNameSpecifierLocBuilder Builder;
TemplateName Template = Arg.getAsTemplateOrTemplatePattern();
- if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
- Builder.MakeTrivial(Context, DTN->getQualifier(), Loc);
- else if (QualifiedTemplateName *QTN =
- Template.getAsQualifiedTemplateName())
- Builder.MakeTrivial(Context, QTN->getQualifier(), Loc);
+ Builder.MakeTrivial(Context, Template.getQualifier(), Loc);
return TemplateArgumentLoc(
Context, Arg, Loc, Builder.getWithLocInContext(Context), Loc,
/*EllipsisLoc=*/Arg.getKind() == TemplateArgument::TemplateExpansion
diff --git a/clang/test/SemaTemplate/ctad.cpp b/clang/test/SemaTemplate/ctad.cpp
index 49c46150d964c..1a575ea527006 100644
--- a/clang/test/SemaTemplate/ctad.cpp
+++ b/clang/test/SemaTemplate/ctad.cpp
@@ -90,3 +90,17 @@ namespace AsValueParameter {
// cxx17-error at -1 {{value of type 'foo::A<int>' is not implicitly convertible to 'int'}}
// cxx20-error at -2 {{non-type template parameter has non-literal type 'foo::A<int>' (aka 'AsValueParameter::foo::A<int>')}}
} // namespace AsValueParameter
+
+namespace ConvertDeducedTemplateArgument {
+ namespace A {
+ template <class> struct B {};
+ }
+
+ template <template <class> class TT1> struct C {
+ C(TT1<int>);
+ };
+
+ template <template <class> class TT2> using D = TT2<int>;
+
+ auto x = C(D<A::B>());
+}
More information about the cfe-commits
mailing list