|  | @@ -71,27 +71,31 @@ GPB_INLINE void GPBDebugCheckRuntimeVersion() {
 | 
	
		
			
				|  |  |  // Conversion functions for de/serializing floating point types.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  GPB_INLINE int64_t GPBConvertDoubleToInt64(double v) {
 | 
	
		
			
				|  |  | -  union { double f; int64_t i; } u;
 | 
	
		
			
				|  |  | -  u.f = v;
 | 
	
		
			
				|  |  | -  return u.i;
 | 
	
		
			
				|  |  | +  GPBInternalCompileAssert(sizeof(double) == sizeof(int64_t), double_not_64_bits);
 | 
	
		
			
				|  |  | +  int64_t result;
 | 
	
		
			
				|  |  | +  memcpy(&result, &v, sizeof(result));
 | 
	
		
			
				|  |  | +  return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  GPB_INLINE int32_t GPBConvertFloatToInt32(float v) {
 | 
	
		
			
				|  |  | -  union { float f; int32_t i; } u;
 | 
	
		
			
				|  |  | -  u.f = v;
 | 
	
		
			
				|  |  | -  return u.i;
 | 
	
		
			
				|  |  | +  GPBInternalCompileAssert(sizeof(float) == sizeof(int32_t), float_not_32_bits);
 | 
	
		
			
				|  |  | +  int32_t result;
 | 
	
		
			
				|  |  | +  memcpy(&result, &v, sizeof(result));
 | 
	
		
			
				|  |  | +  return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  GPB_INLINE double GPBConvertInt64ToDouble(int64_t v) {
 | 
	
		
			
				|  |  | -  union { double f; int64_t i; } u;
 | 
	
		
			
				|  |  | -  u.i = v;
 | 
	
		
			
				|  |  | -  return u.f;
 | 
	
		
			
				|  |  | +  GPBInternalCompileAssert(sizeof(double) == sizeof(int64_t), double_not_64_bits);
 | 
	
		
			
				|  |  | +  double result;
 | 
	
		
			
				|  |  | +  memcpy(&result, &v, sizeof(result));
 | 
	
		
			
				|  |  | +  return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  GPB_INLINE float GPBConvertInt32ToFloat(int32_t v) {
 | 
	
		
			
				|  |  | -  union { float f; int32_t i; } u;
 | 
	
		
			
				|  |  | -  u.i = v;
 | 
	
		
			
				|  |  | -  return u.f;
 | 
	
		
			
				|  |  | +  GPBInternalCompileAssert(sizeof(float) == sizeof(int32_t), float_not_32_bits);
 | 
	
		
			
				|  |  | +  float result;
 | 
	
		
			
				|  |  | +  memcpy(&result, &v, sizeof(result));
 | 
	
		
			
				|  |  | +  return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  GPB_INLINE int32_t GPBLogicalRightShift32(int32_t value, int32_t spaces) {
 |