Author: Richard Smith Date: 2020-11-03T14:09:54-08:00 New Revision: 09b54e2799a11c6813796c70475d52e09898568b
URL: https://github.com/llvm/llvm-project/commit/09b54e2799a11c6813796c70475d52e09898568b DIFF: https://github.com/llvm/llvm-project/commit/09b54e2799a11c6813796c70475d52e09898568b.diff LOG: When re-checking an already-substituted template argument, don't lose the reference-ness of the parameter's type. Added: Modified: clang/lib/Sema/SemaTemplateInstantiate.cpp clang/test/SemaTemplate/temp_arg_nontype_cxx11.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index d01189b42ed6..03670e2145c1 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -1593,7 +1593,7 @@ TemplateInstantiator::TransformSubstNonTypeTemplateParmExpr( ExprResult SubstReplacement = TransformExpr(E->getReplacement()); if (SubstReplacement.isInvalid()) return true; - QualType SubstType = TransformType(E->getType()); + QualType SubstType = TransformType(E->getParameterType(getSema().Context)); if (SubstType.isNull()) return true; // The type may have been previously dependent and not now, which means we diff --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx11.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx11.cpp index 460b6def5d6f..522835f33454 100644 --- a/clang/test/SemaTemplate/temp_arg_nontype_cxx11.cpp +++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx11.cpp @@ -65,3 +65,15 @@ namespace PR42513 { void use() { f<X1>(); } } + +namespace ReferenceToConstexpr { + struct A { const char *str = "hello"; }; + constexpr A a; + template<const A &r, typename T> struct B { + static_assert(__builtin_strcmp(r.str, "hello") == 0, ""); + }; + template<const A &r> struct C { + template<typename T> void f(B<r, T>, T) {} + }; + void f(C<a> ca) { ca.f({}, 0); } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits