mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[PDB] Fix unsigned integer overflow
When building with -fsanitize=unsigned-integer-overflow, this code causes a diagnostic like: ../../llvm/lib/DebugInfo/PDB/Native/GSIStreamBuilder.cpp:159:15: runtime error: unsigned integer overflow: 90 - 229 cannot be represented in type 'unsigned long' unsigned integer overflow is well defined and it isn't an issue in practice, but in obscure scenarios (S1.size() small, S2.size over 2GB on 32-bit systems) it could even be a bug. So use the usual idiom for implementing cmp functions instead of the gernally considered buggy idiom :) See e.g. https://www.gnu.org/software/libc/manual/html_node/Comparison-Functions.html or https://stackoverflow.com/questions/10996418/efficient-integer-compare-function/10997428#10997428 Differential Revision: https://reviews.llvm.org/D97557
This commit is contained in:
parent
e226eb5874
commit
0a5bf9f615
@ -156,7 +156,7 @@ static int gsiRecordCmp(StringRef S1, StringRef S2) {
|
||||
size_t RS = S2.size();
|
||||
// Shorter strings always compare less than longer strings.
|
||||
if (LS != RS)
|
||||
return LS - RS;
|
||||
return (LS > RS) - (LS < RS);
|
||||
|
||||
// If either string contains non ascii characters, memcmp them.
|
||||
if (LLVM_UNLIKELY(!isAsciiString(S1) || !isAsciiString(S2)))
|
||||
|
Loading…
Reference in New Issue
Block a user