diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-12-09 10:44:32 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-12-09 10:44:32 +0000 |
commit | 2a81645de598e34f94f3586c8233b39280f09870 (patch) | |
tree | b1259d82044ea68a9edd463f563a085d4ae24a50 /clang/lib/Serialization/Module.cpp | |
parent | 34ec7f741112a1f0d0882147808bc32bade2cf1c (diff) | |
download | bcm5719-llvm-2a81645de598e34f94f3586c8233b39280f09870.tar.gz bcm5719-llvm-2a81645de598e34f94f3586c8233b39280f09870.zip |
[-cxx-abi microsoft] Mangle large integral constants correctly
Testing has revealed that large integral constants (i.e. > INT64_MAX)
are always mangled as-if they are negative, even in places where it
would not make sense for them to be negative (like non-type template
parameters of type unsigned long long).
To address this, we change the way we model number mangling: always
mangle as-if our number is an int64_t. This should result in correct
results when we have large unsigned numbers.
N.B. Bizarrely, things that are 32-bit displacements like vbptr offsets
are mangled as-if they are unsigned 32-bit numbers. This is a pretty
egregious waste of space, it would be a 4x savings if we could mangle it
like a signed 32-bit number. Instead, we explicitly cast these
displacements to uint32_t and let the mangler proceed.
llvm-svn: 196771
Diffstat (limited to 'clang/lib/Serialization/Module.cpp')
0 files changed, 0 insertions, 0 deletions