svn commit: r261680 - head/contrib/llvm/tools/clang/lib/Sema

Dimitry Andric dim at FreeBSD.org
Sun Feb 9 20:52:48 UTC 2014


Author: dim
Date: Sun Feb  9 20:52:47 2014
New Revision: 261680
URL: http://svnweb.freebsd.org/changeset/base/261680

Log:
  Pull in r200899 from upstream clang trunk:
  
    Allow transformation of VariableArray to ConstantArray.
  
    In the following code:
  
       struct A { static const int sz; };
       template<class T> 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
  MFC after:	3 days

Modified:
  head/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h

Modified: head/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h	Sun Feb  9 20:32:27 2014	(r261679)
+++ head/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h	Sun Feb  9 20:52:47 2014	(r261680)
@@ -3837,7 +3837,9 @@ TreeTransform<Derived>::TransformVariabl
       return QualType();
   }
 
-  VariableArrayTypeLoc NewTL = TLB.push<VariableArrayTypeLoc>(Result);
+  // We might have constant size array now, but fortunately it has the same
+  // location layout.
+  ArrayTypeLoc NewTL = TLB.push<ArrayTypeLoc>(Result);
   NewTL.setLBracketLoc(TL.getLBracketLoc());
   NewTL.setRBracketLoc(TL.getRBracketLoc());
   NewTL.setSizeExpr(Size);


More information about the svn-src-all mailing list