Don't store Twine temporaries, it's not safe.

And don't append the name over and over again in the loop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129210 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2011-04-09 11:26:27 +00:00
parent cc513e1cf1
commit c18214a6e0
2 changed files with 11 additions and 9 deletions

View File

@ -85,12 +85,11 @@ MCSymbol *MCContext::CreateSymbol(StringRef Name) {
StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name);
if (NameEntry->getValue()) {
assert(isTemporary && "Cannot rename non temporary symbols");
SmallString<128> NewName;
SmallString<128> NewName = Name;
do {
Twine T = Name + Twine(NextUniqueID++);
T.toVector(NewName);
StringRef foo = NewName;
NameEntry = &UsedNames.GetOrCreateValue(foo);
NewName.resize(Name.size());
raw_svector_ostream(NewName) << NextUniqueID++;
NameEntry = &UsedNames.GetOrCreateValue(NewName);
} while (NameEntry->getValue());
}
NameEntry->setValue(true);
@ -110,9 +109,8 @@ MCSymbol *MCContext::GetOrCreateSymbol(const Twine &Name) {
MCSymbol *MCContext::CreateTempSymbol() {
SmallString<128> NameSV;
Twine Name = Twine(MAI.getPrivateGlobalPrefix()) + "tmp" +
Twine(NextUniqueID++);
Name.toVector(NameSV);
raw_svector_ostream(NameSV)
<< MAI.getPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
return CreateSymbol(NameSV);
}

View File

@ -1,10 +1,14 @@
// RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
.size bar, . - bar
.Ltmp01:
.size foo, .Ltmp01 - foo
.Ltmp0:
.size foo, .Ltmp0 - foo
.size qux, .Ltmp0 - qux
// CHECK: .Ltmp0:
// CHECK: .size bar, .Ltmp0-bar
// CHECK: .Ltmp01
// CHECK: .size foo, .Ltmp01-foo
// CHECK: .Ltmp02
// CHECK: .size qux, .Ltmp02-qux