From 11ec5c94e7f40b5b542cbd753643b14019719c59 Mon Sep 17 00:00:00 2001 From: dim Date: Wed, 12 Feb 2014 07:51:14 +0000 Subject: MFC r261680: Pull in r200899 from upstream clang trunk: Allow transformation of VariableArray to ConstantArray. In the following code: struct A { static const int sz; }; template void f() { T arr[A::sz]; } the array 'arr' is represented as a variable size array in the template. If 'A::sz' gets value below in the translation unit, the array in instantiation can turn into constant size array. This change fixes PR18633. Differential Revision: http://llvm-reviews.chandlerc.com/D2688 This fixes "Assertion failed: (T::isKind(*this)), function castAs" errors, which can occur when building the security/quantis port. Reported by: ale --- contrib/llvm/tools/clang/lib/Sema/TreeTransform.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'contrib/llvm/tools/clang/lib/Sema/TreeTransform.h') diff --git a/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h b/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h index 89e23ef..faa47e8 100644 --- a/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h +++ b/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h @@ -3837,7 +3837,9 @@ TreeTransform::TransformVariableArrayType(TypeLocBuilder &TLB, return QualType(); } - VariableArrayTypeLoc NewTL = TLB.push(Result); + // We might have constant size array now, but fortunately it has the same + // location layout. + ArrayTypeLoc NewTL = TLB.push(Result); NewTL.setLBracketLoc(TL.getLBracketLoc()); NewTL.setRBracketLoc(TL.getRBracketLoc()); NewTL.setSizeExpr(Size); -- cgit v1.1