X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FMangler.cpp;h=50fa3c1885b9c94db263acb98af008fde1eb311d;hb=629c1a3f78494d0dd769fe82bd2bd17df0555843;hp=b3211a315306034d7555f726fc47724e61cbdf5e;hpb=b74ed07bfd3af42331b1964c24c39912610a08f4;p=oota-llvm.git diff --git a/lib/VMCore/Mangler.cpp b/lib/VMCore/Mangler.cpp index b3211a31530..50fa3c1885b 100644 --- a/lib/VMCore/Mangler.cpp +++ b/lib/VMCore/Mangler.cpp @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -14,6 +14,7 @@ #include "llvm/Support/Mangler.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" using namespace llvm; @@ -95,6 +96,8 @@ std::string Mangler::makeNameProper(const std::string &X, const char *Prefix) { for (std::string::const_iterator E = X.end(); I != E; ++I) { if (*I == '"') Result += "_QQ_"; + else if (*I == '\n') + Result += "_NL_"; else Result += *I; } @@ -125,7 +128,7 @@ std::string Mangler::getValueName(const Value *V) { } -std::string Mangler::getValueName(const GlobalValue *GV) { +std::string Mangler::getValueName(const GlobalValue *GV, const char * Suffix) { // Check to see whether we've already named V. std::string &Name = Memo[GV]; if (!Name.empty()) @@ -134,7 +137,7 @@ std::string Mangler::getValueName(const GlobalValue *GV) { // Name mangling occurs as follows: // - If V is an intrinsic function, do not change name at all // - Otherwise, mangling occurs if global collides with existing name. - if (isa(GV) && cast(GV)->getIntrinsicID()) { + if (isa(GV) && cast(GV)->isIntrinsic()) { Name = GV->getName(); // Is an intrinsic function } else if (!GV->hasName()) { // Must mangle the global into a unique ID. @@ -142,7 +145,7 @@ std::string Mangler::getValueName(const GlobalValue *GV) { static unsigned GlobalID = 0; Name = "__unnamed_" + utostr(TypeUniqueID) + "_" + utostr(GlobalID++); } else if (!MangledGlobals.count(GV)) { - Name = makeNameProper(GV->getName(), Prefix); + Name = makeNameProper(GV->getName() + Suffix, Prefix); } else { unsigned TypeUniqueID = getTypeID(GV->getType()); Name = "l" + utostr(TypeUniqueID) + "_" + makeNameProper(GV->getName()); @@ -163,15 +166,16 @@ void Mangler::InsertName(GlobalValue *GV, } else { // If GV is external but the existing one is static, mangle the existing one if ((GV->hasExternalLinkage() || GV->hasDLLImportLinkage()) && - !(ExistingValue->hasExternalLinkage() || ExistingValue->hasDLLImportLinkage())) { + !(ExistingValue->hasExternalLinkage() + || ExistingValue->hasDLLImportLinkage())) { MangledGlobals.insert(ExistingValue); ExistingValue = GV; } else if ((GV->hasExternalLinkage() || GV->hasDLLImportLinkage()) && (ExistingValue->hasExternalLinkage() || ExistingValue->hasDLLImportLinkage()) && - GV->isExternal() && - ExistingValue->isExternal()) { + GV->isDeclaration() && + ExistingValue->isDeclaration()) { // If the two globals both have external inkage, and are both external, // don't mangle either of them, we just have some silly type mismatch. } else { @@ -185,9 +189,7 @@ void Mangler::InsertName(GlobalValue *GV, Mangler::Mangler(Module &M, const char *prefix) : Prefix(prefix), UseQuotes(false), PreserveAsmNames(false), Count(0), TypeCounter(0) { - std::fill(AcceptableChars, - AcceptableChars+sizeof(AcceptableChars)/sizeof(AcceptableChars[0]), - 0); + std::fill(AcceptableChars, array_endof(AcceptableChars), 0); // Letters and numbers are acceptable. for (unsigned char X = 'a'; X <= 'z'; ++X) @@ -207,9 +209,8 @@ Mangler::Mangler(Module &M, const char *prefix) std::map Names; for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) InsertName(I, Names); - for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) + for (Module::global_iterator I = M.global_begin(), E = M.global_end(); + I != E; + ++I) InsertName(I, Names); } - -// Cause this file to be linked in when Support/Mangler.h is #included -DEFINING_FILE_FOR(Mangler)