diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-04-09 11:26:27 +0000 | 
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-04-09 11:26:27 +0000 | 
| commit | 2b6c96b43d3355ac4bff9498d7ec219f00e32323 (patch) | |
| tree | 33f7e24982cf026b78bb022e20a9c636817e3a6d | |
| parent | 2792f2b86b8aca24b2aae8a782971ef0dc461e45 (diff) | |
| download | bcm5719-llvm-2b6c96b43d3355ac4bff9498d7ec219f00e32323.tar.gz bcm5719-llvm-2b6c96b43d3355ac4bff9498d7ec219f00e32323.zip  | |
Don't store Twine temporaries, it's not safe.
And don't append the name over and over again in the loop.
llvm-svn: 129210
| -rw-r--r-- | llvm/lib/MC/MCContext.cpp | 14 | ||||
| -rw-r--r-- | llvm/test/MC/AsmParser/rename.s | 6 | 
2 files changed, 11 insertions, 9 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 7c687135fc6..af8cd8eb141 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -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);  } diff --git a/llvm/test/MC/AsmParser/rename.s b/llvm/test/MC/AsmParser/rename.s index 64ca5153812..934cee808bd 100644 --- a/llvm/test/MC/AsmParser/rename.s +++ b/llvm/test/MC/AsmParser/rename.s @@ -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  | 

