summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.h
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-12-09 04:28:34 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-12-09 04:28:34 +0000
commit048f90cc04a4914d6427cde22b3d185f344e8ca5 (patch)
tree92c16cc31116ffad5c7984c3e5ae22ca03d9c4e9 /clang/lib/CodeGen/CodeGenModule.h
parentf6c8fe983b188dde5d4aaa14984c6c7e1208219b (diff)
downloadbcm5719-llvm-048f90cc04a4914d6427cde22b3d185f344e8ca5.tar.gz
bcm5719-llvm-048f90cc04a4914d6427cde22b3d185f344e8ca5.zip
[-cxx-abi microsoft] Properly mangle enums
While testing our ability to mangle large constants (PR18175), I incidentally discovered that we did not properly mangle enums correctly. Previously, we would append the width of the enum in bytes after the type-tag differentiator. This would mean "enum : short" would be mangled as 'W2' while "enum : char" would be mangled as 'W1'. Upon testing this with several versions of MSVC, I found that this did not match their behavior: they always use 'W4'. N.B. Quick testing uncovered that undname allows different numbers to follow the 'W' in the following way: 'W0' -> "enum char" 'W1' -> "enum unsigned char" 'W2' -> "enum short" 'W3' -> "enum unsigned short" 'W4' -> "enum" 'W5' -> "enum unsigned int" 'W6' -> "enum long" 'W7' -> "enum unsigned long" However this scheme appears abandoned, I cannot get MSVC to trigger it. Furthermore, it's incomplete: it doesn't handle "bool" or "long long". llvm-svn: 196752
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud