[PDB] Fix unsigned integer overflow
authorNico Weber <thakis@chromium.org>
Fri, 26 Feb 2021 16:14:26 +0000 (11:14 -0500)
committerNico Weber <thakis@chromium.org>
Fri, 26 Feb 2021 16:26:53 +0000 (11:26 -0500)
commit301551ae8e8f54fd66867c9411fcc17b2f02be7d
tree525a39d90a5c7aeddaa79b1f9121fd1364847817
parented1f45bce9fb4688a4ab06862b25c6d55b5dc415
[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
llvm/lib/DebugInfo/PDB/Native/GSIStreamBuilder.cpp