Give L__FUNCTION__ the right type in templates. PR13206.
llvm-svn: 159171
This commit is contained in:
parent
1598289c72
commit
606cef46e3
|
@ -1093,7 +1093,11 @@ TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E) {
|
|||
unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length();
|
||||
|
||||
llvm::APInt LengthI(32, Length + 1);
|
||||
QualType ResTy = getSema().Context.CharTy.withConst();
|
||||
QualType ResTy;
|
||||
if (IT == PredefinedExpr::LFunction)
|
||||
ResTy = getSema().Context.WCharTy.withConst();
|
||||
else
|
||||
ResTy = getSema().Context.CharTy.withConst();
|
||||
ResTy = getSema().Context.getConstantArrayType(ResTy, LengthI,
|
||||
ArrayType::Normal, 0);
|
||||
PredefinedExpr *PE =
|
||||
|
|
|
@ -7,3 +7,19 @@ void abcdefghi12(void) {
|
|||
const wchar_t (*ss)[12] = &STR2WSTR(__FUNCTION__);
|
||||
static int arr[sizeof(STR2WSTR(__FUNCTION__))==12*sizeof(wchar_t) ? 1 : -1];
|
||||
}
|
||||
|
||||
namespace PR13206 {
|
||||
void foo(const wchar_t *);
|
||||
|
||||
template<class T> class A {
|
||||
public:
|
||||
void method() {
|
||||
foo(L__FUNCTION__);
|
||||
}
|
||||
};
|
||||
|
||||
void bar() {
|
||||
A<int> x;
|
||||
x.method();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue