When llvm-upgrade calls Value::setName from setValueName it ends up attempting to insert a value in the symbol table. This can recurse infinitely in this loop: // Otherwise, there is a naming conflict. Rename this value. std::string UniqueName = V->getName(); unsigned BaseSize = UniqueName.size(); do { // Trim any suffix off. UniqueName.resize(BaseSize); UniqueName += utostr(++LastUnique); // Try insert the vmap entry with this suffix. } while (!vmap.insert(make_pair(UniqueName, V)).second); Last night's nightly test was halted by this. It looped 22,821,681,606 times before I broke into it with the debugger. Its unclear why the map is refusing to insert the new name.
This affects llvm-as and all deja-gnu tests as well, its not specific to llvm-upgrade.
Doh. Uninitialized variable: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070205/044347.html
Yup, that fixed it.
Created attachment 654 [details] 64bit failure just for completeness, this patch also seems to solve a bug involving running the attached file though llvm-as on alpha. Things in the symbol table would get trashed (Value* becoming garbage) and lost, and lookups of stuff that should be in there resulted in triggering the conflict-so-rename code in insert. This didn't affect x86.