Browse Source

Fixed V610: Undefined behavior

In an arithmetic expression, all the variables whose values can be represented with type 'int' will be promoted to this type. Therefore, the result of the '~mask' expression is a negative number. By the C++ standard, shifting a negative number to the left leads to an undefined behavior.
Phillip Khandeliants 8 years ago
parent
commit
1b4f238a25
1 changed files with 1 additions and 1 deletions
  1. 1 1
      Engine/source/core/strings/unicode.cpp

+ 1 - 1
Engine/source/core/strings/unicode.cpp

@@ -469,7 +469,7 @@ U32 oneUTF32toUTF8(const UTF32 codepoint, UTF8 *threeByteCodeunitBuf)
 
 
    //-----------------
    //-----------------
    U8  mask = sgByteMask8LUT[0];            // 0011 1111
    U8  mask = sgByteMask8LUT[0];            // 0011 1111
-   U8  marker = ( ~mask << 1);            // 1000 0000
+   U8  marker = ( ~static_cast<U32>(mask) << 1u);            // 1000 0000
    
    
    // Process the low order bytes, shifting the codepoint down 6 each pass.
    // Process the low order bytes, shifting the codepoint down 6 each pass.
    for( S32 i = bytecount-1; i > 0; i--)
    for( S32 i = bytecount-1; i > 0; i--)