ensure globals have names, as we rely on names for address lookups
diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp
index 362dd24..ce647d6 100644
--- a/lib/Target/JSBackend/JSBackend.cpp
+++ b/lib/Target/JSBackend/JSBackend.cpp
@@ -146,7 +146,7 @@
/// module to JavaScript.
class JSWriter : public ModulePass {
raw_pwrite_stream &Out;
- const Module *TheModule;
+ Module *TheModule;
unsigned UniqueNum;
unsigned NextFunctionIndex; // used with NoAliasingFunctionPointers
ValueMap ValueNames;
@@ -2698,6 +2698,24 @@
}
void JSWriter::processConstants() {
+ // Ensure a name for each global
+ for (Module::global_iterator I = TheModule->global_begin(),
+ E = TheModule->global_end(); I != E; ++I) {
+ if (I->hasInitializer()) {
+ if (!I->hasName()) {
+ // ensure a unique name
+ static int id = 1;
+ std::string newName;
+ while (1) {
+ newName = std::string("glb_") + utostr(id);
+ if (!TheModule->getGlobalVariable("glb_" + utostr(id))) break;
+ id++;
+ assert(id != 0);
+ }
+ I->setName(Twine(newName));
+ }
+ }
+ }
// First, calculate the address of each constant
for (Module::const_global_iterator I = TheModule->global_begin(),
E = TheModule->global_end(); I != E; ++I) {