Author: rsmith Date: Fri Jan 27 18:38:35 2017 New Revision: 293350 URL: http://llvm.org/viewvc/llvm-project?rev=293350&view=rev Log: When converting a template argument representing &array to an expression for a pointer typed template parameter, form &array rather than an array-to-pointer decay on array.
Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/test/SemaTemplate/temp_arg_nontype.cpp Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=293350&r1=293349&r2=293350&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Fri Jan 27 18:38:35 2017 @@ -5830,8 +5830,9 @@ Sema::BuildExpressionFromDeclTemplateArg if (RefExpr.isInvalid()) return ExprError(); - if (T->isFunctionType() || T->isArrayType()) { - // Decay functions and arrays. + if (!Context.hasSameUnqualifiedType(ParamType->getPointeeType(), T) && + (T->isFunctionType() || T->isArrayType())) { + // Decay functions and arrays unless we're forming a pointer to array. RefExpr = DefaultFunctionArrayConversion(RefExpr.get()); if (RefExpr.isInvalid()) return ExprError(); Modified: cfe/trunk/test/SemaTemplate/temp_arg_nontype.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/temp_arg_nontype.cpp?rev=293350&r1=293349&r2=293350&view=diff ============================================================================== --- cfe/trunk/test/SemaTemplate/temp_arg_nontype.cpp (original) +++ cfe/trunk/test/SemaTemplate/temp_arg_nontype.cpp Fri Jan 27 18:38:35 2017 @@ -455,3 +455,11 @@ namespace nondependent_default_arg_order X<int *, &m> y; f(y); // expected-error {{ambiguous}} } } + +namespace pointer_to_char_array { + typedef char T[4]; + template<T *P> struct A { void f(); }; + template<T *P> void A<P>::f() {} + T foo = "foo"; + void g() { A<&foo>().f(); } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits