summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/Module.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-12-09 10:44:32 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-12-09 10:44:32 +0000
commit2a81645de598e34f94f3586c8233b39280f09870 (patch)
treeb1259d82044ea68a9edd463f563a085d4ae24a50 /clang/lib/Serialization/Module.cpp
parent34ec7f741112a1f0d0882147808bc32bade2cf1c (diff)
downloadbcm5719-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
OpenPOWER on IntegriCloud