diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-04 01:02:03 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-04 01:02:03 +0000 |
commit | 4819ac44c0e5222ebfe8e199c51f653f52177336 (patch) | |
tree | b8cc63f993cb07c946a977db26bdaf7e31d089da /lib/CodeGen/Mangle.cpp | |
parent | 06a3066ea137b79e87a2f5d67e3012334bf4896b (diff) |
Refactor local class name mangling and make it
ABI conforming.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97702 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index e053f78008..20d54b3410 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -65,8 +65,6 @@ static const CXXMethodDecl *getStructor(const CXXMethodDecl *MD) { } static const unsigned UnknownArity = ~0U; -static unsigned Discriminator = 0; -static llvm::DenseMap<const NamedDecl*, unsigned> Uniquifier; /// CXXNameMangler - Manage the mangling of a single name. class CXXNameMangler { @@ -672,17 +670,14 @@ void CXXNameMangler::mangleLocalName(const NamedDecl *ND) { Out << 'E'; mangleNestedName(ND, DC, true /*NoFunction*/); - // FIXME. This still does not conform to ABI and does not cover all cases. - unsigned &discriminator = Uniquifier[ND]; - if (!discriminator) - discriminator = ++Discriminator; - if (discriminator == 1) - return; - unsigned disc = discriminator-2; - if (disc < 10) - Out << '_' << disc; - else - Out << "__" << disc << '_'; + // FIXME. This still does not cover all cases. + unsigned disc; + if (Context.getNextDiscriminator(ND, disc)) { + if (disc < 10) + Out << '_' << disc; + else + Out << "__" << disc << '_'; + } return; } |