X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FSmallVector.h;h=e93177cdcb748338c28a46fca0ba44c24e2a9a60;hb=a727d5502c8e23c090da658bf14c5ebc1169a070;hp=723cbcdaf0dc817a5744a6c86d6502e22eb03a04;hpb=f15bd1b9c66ca11776060ae0db2024d741d9de2d;p=oota-llvm.git diff --git a/include/llvm/ADT/SmallVector.h b/include/llvm/ADT/SmallVector.h index 723cbcdaf0d..e93177cdcb7 100644 --- a/include/llvm/ADT/SmallVector.h +++ b/include/llvm/ADT/SmallVector.h @@ -20,10 +20,10 @@ #ifdef _MSC_VER namespace std { +#if _MSC_VER <= 1310 // Work around flawed VC++ implementation of std::uninitialized_copy. Define // additional overloads so that elements with pointer types are recognized as // scalars and not objects, causing bizarre type conversion errors. - // FIXME: this hack may or may not be correct for Visual Studio 2005. template inline _Scalar_ptr_iterator_tag _Ptr_cat(T1 **, T2 **) { _Scalar_ptr_iterator_tag _Cat; @@ -35,6 +35,10 @@ namespace std { _Scalar_ptr_iterator_tag _Cat; return _Cat; } +#else +// FIXME: It is not clear if the problem is fixed in VS 2005. What is clear +// is that the above hack won't work if it wasn't fixed. +#endif } #endif @@ -304,8 +308,8 @@ private: // Define this out-of-line to dissuade the C++ compiler from inlining it. template void SmallVectorImpl::grow(unsigned MinSize) { - unsigned CurCapacity = Capacity-Begin; - unsigned CurSize = size(); + unsigned CurCapacity = unsigned(Capacity-Begin); + unsigned CurSize = unsigned(size()); unsigned NewCapacity = 2*CurCapacity; if (NewCapacity < MinSize) NewCapacity = MinSize; @@ -372,8 +376,8 @@ SmallVectorImpl::operator=(const SmallVectorImpl &RHS) { // If we already have sufficient space, assign the common elements, then // destroy any excess. - unsigned RHSSize = RHS.size(); - unsigned CurSize = size(); + unsigned RHSSize = unsigned(RHS.size()); + unsigned CurSize = unsigned(size()); if (CurSize >= RHSSize) { // Assign common elements. iterator NewEnd = std::copy(RHS.Begin, RHS.Begin+RHSSize, Begin);