mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Fix the msvc 2010 build.
The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 implements parts of C++0x based on the draft standard. An old version of the draft had a bug that makes std::pair<T1*, T2*>(something, 0) fail to compile. This is because the template<class U, class V> pair(U&& x, V&& y) constructor is selected, even though it later fails to implicitly convert U and V to frist_type and second_type. This has been fixed in n3090, but it seems that Microsoft is not going to update msvc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -352,7 +352,16 @@ VNInfo *LiveIntervalMap::defValue(const VNInfo *ParentVNI, SlotIndex Idx) { | |||||||
|  |  | ||||||
|   // This is a complex def. Mark with a NULL in valueMap. |   // This is a complex def. Mark with a NULL in valueMap. | ||||||
|   VNInfo *OldVNI = |   VNInfo *OldVNI = | ||||||
|     valueMap_.insert(ValueMap::value_type(ParentVNI, 0)).first->second; |     valueMap_.insert( | ||||||
|  |       ValueMap::value_type(ParentVNI, static_cast<VNInfo *>(0))).first->second; | ||||||
|  |       // The static_cast<VNInfo *> is only needed to work around a bug in an | ||||||
|  |       // old version of the C++0x standard which the following compilers | ||||||
|  |       // implemented and have yet to fix: | ||||||
|  |       // | ||||||
|  |       // Microsoft Visual Studio 2010 Version 10.0.30319.1 RTMRel | ||||||
|  |       // Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 | ||||||
|  |       // | ||||||
|  |       // If/When we move to C++0x, this can be replaced by nullptr. | ||||||
|   (void)OldVNI; |   (void)OldVNI; | ||||||
|   assert(OldVNI == 0 && "Simple/Complex values mixed"); |   assert(OldVNI == 0 && "Simple/Complex values mixed"); | ||||||
|  |  | ||||||
| @@ -371,7 +380,15 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx) { | |||||||
|  |  | ||||||
|   // Use insert for lookup, so we can add missing values with a second lookup. |   // Use insert for lookup, so we can add missing values with a second lookup. | ||||||
|   std::pair<ValueMap::iterator,bool> InsP = |   std::pair<ValueMap::iterator,bool> InsP = | ||||||
|     valueMap_.insert(ValueMap::value_type(ParentVNI, 0)); |     valueMap_.insert(ValueMap::value_type(ParentVNI, static_cast<VNInfo *>(0))); | ||||||
|  |     // The static_cast<VNInfo *> is only needed to work around a bug in an | ||||||
|  |     // old version of the C++0x standard which the following compilers | ||||||
|  |     // implemented and have yet to fix: | ||||||
|  |     // | ||||||
|  |     // Microsoft Visual Studio 2010 Version 10.0.30319.1 RTMRel | ||||||
|  |     // Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 | ||||||
|  |     // | ||||||
|  |     // If/When we move to C++0x, this can be replaced by nullptr. | ||||||
|  |  | ||||||
|   // This was an unknown value. Create a simple mapping. |   // This was an unknown value. Create a simple mapping. | ||||||
|   if (InsP.second) |   if (InsP.second) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user