| Index: src/PNaClTranslator.cpp
|
| diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp
|
| index caa0c57c6a05052f1d2926d63039102baba66301..01421a92bbb6889679ec71ceb40e53173cc7c079 100644
|
| --- a/src/PNaClTranslator.cpp
|
| +++ b/src/PNaClTranslator.cpp
|
| @@ -473,17 +473,22 @@ private:
|
|
|
| // Gives Decl a name if it doesn't already have one. Prefix and NameIndex are
|
| // used to generate the name. NameIndex is automatically incremented if a new
|
| - // name is created. DeclType is literal text describing the type of name
|
| - // being created. Also generates warning if created names may conflict with
|
| - // named declarations.
|
| + // name is created. DeclType is literal text describing the type of name being
|
| + // created. Also generates a warning if created names may conflict with named
|
| + // declarations.
|
| void installDeclarationName(Ice::GlobalDeclaration *Decl,
|
| - const Ice::IceString &Prefix,
|
| - const char *DeclType,
|
| + const std::string &Prefix, const char *DeclType,
|
| NaClBcIndexSize_t &NameIndex) {
|
| if (Decl->hasName()) {
|
| - Translator.checkIfUnnamedNameSafe(Decl->getName(), DeclType, Prefix);
|
| + Translator.checkIfUnnamedNameSafe(Decl->getName().toString(), DeclType,
|
| + Prefix);
|
| } else {
|
| - Decl->setName(Translator.createUnnamedName(Prefix, NameIndex));
|
| + Ice::GlobalContext *Ctx = Translator.getContext();
|
| + if (Ice::BuildDefs::dump() || !Decl->isInternal()) {
|
| + Decl->setName(Ctx, Translator.createUnnamedName(Prefix, NameIndex));
|
| + } else {
|
| + Decl->setName(Ctx);
|
| + }
|
| ++NameIndex;
|
| }
|
| }
|
| @@ -491,7 +496,7 @@ private:
|
| // Installs names for global variables without names.
|
| void installGlobalVarNames() {
|
| assert(VariableDeclarations);
|
| - const Ice::IceString &GlobalPrefix =
|
| + const std::string &GlobalPrefix =
|
| getTranslator().getFlags().getDefaultGlobalPrefix();
|
| if (!GlobalPrefix.empty()) {
|
| NaClBcIndexSize_t NameIndex = 0;
|
| @@ -503,7 +508,7 @@ private:
|
|
|
| // Installs names for functions without names.
|
| void installFunctionNames() {
|
| - const Ice::IceString &FunctionPrefix =
|
| + const std::string &FunctionPrefix =
|
| getTranslator().getFlags().getDefaultFunctionPrefix();
|
| if (!FunctionPrefix.empty()) {
|
| NaClBcIndexSize_t NameIndex = 0;
|
| @@ -515,13 +520,13 @@ private:
|
|
|
| // Builds a constant symbol named Name. IsExternal is true iff the symbol is
|
| // external.
|
| - Ice::Constant *getConstantSym(const Ice::IceString &Name,
|
| - bool IsExternal) const {
|
| + Ice::Constant *getConstantSym(Ice::GlobalString Name, bool IsExternal) const {
|
| + Ice::GlobalContext *Ctx = getTranslator().getContext();
|
| if (IsExternal) {
|
| - return getTranslator().getContext()->getConstantExternSym(Name);
|
| + return Ctx->getConstantExternSym(Name);
|
| } else {
|
| const Ice::RelocOffsetT Offset = 0;
|
| - return getTranslator().getContext()->getConstantSym(Offset, Name);
|
| + return Ctx->getConstantSym(Offset, Name);
|
| }
|
| }
|
|
|
| @@ -1353,11 +1358,12 @@ public:
|
| bool convertFunction() {
|
| bool ParserResult;
|
| {
|
| - Ice::TimerMarker T(getTranslator().getContext(), FuncDecl->getName());
|
| + Ice::TimerMarker T(getTranslator().getContext(),
|
| + FuncDecl->getName().toStringOrEmpty());
|
| // Note: The Cfg is created, even when IR generation is disabled. This is
|
| // done to install a CfgLocalAllocator for various internal containers.
|
| - Func = Ice::Cfg::create(getTranslator().getContext(),
|
| - getTranslator().getNextSequenceNumber());
|
| + Ice::GlobalContext *Ctx = getTranslator().getContext();
|
| + Func = Ice::Cfg::create(Ctx, getTranslator().getNextSequenceNumber());
|
|
|
| Ice::CfgLocalAllocatorScope _(Func.get());
|
|
|
| @@ -2102,9 +2108,9 @@ private:
|
| }
|
| }
|
|
|
| - const Ice::IceString printName(Ice::FunctionDeclaration *Fcn) {
|
| + const std::string printName(Ice::FunctionDeclaration *Fcn) {
|
| if (Fcn)
|
| - return Fcn->getName();
|
| + return Fcn->getName().toString();
|
| return "function";
|
| }
|
| };
|
| @@ -3052,7 +3058,12 @@ void ModuleValuesymtabParser::setValueName(NaClBcIndexSize_t Index,
|
| Decl->setLinkage(llvm::GlobalValue::ExternalLinkage);
|
| }
|
|
|
| - Decl->setName(StringRef(Name.data(), Name.size()));
|
| + // Unconditionally capture the name if it is provided in the input file,
|
| + // regardless of whether dump is enabled or whether the symbol is internal vs
|
| + // external. This fits in well with the lit tests, and most symbols in a
|
| + // conforming pexe are nameless and don't take this path.
|
| + Decl->setName(getTranslator().getContext(),
|
| + StringRef(Name.data(), Name.size()));
|
| }
|
|
|
| void ModuleValuesymtabParser::setBbName(NaClBcIndexSize_t Index,
|
|
|