Commit d51a6f1a authored by Tanya Lattner's avatar Tanya Lattner
Browse files

Merge 83417 from mainline.

r83391 was completely broken since Twines keep references to their inputs, and
some of the inputs were temporaries.  Here's a real fix for the miscompilation.
Thanks to sabre for pointing out the problem.

llvm-svn: 83859
parent aee09631
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@

#include "llvm/ADT/Triple.h"

#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Twine.h"
#include <cassert>
#include <cstring>
@@ -326,10 +327,14 @@ void Triple::setOS(OSType Kind) {
}

void Triple::setArchName(const StringRef &Str) {
  // Work around a miscompilation bug in gcc 4.0.3.
  Twine a = getVendorName() + "-" + getOSAndEnvironmentName();
  Twine b = Str + "-" + a;
  setTriple(b);
  // Work around a miscompilation bug for Twines in gcc 4.0.3.
  SmallString<64> Triple;
  Triple += Str;
  Triple += "-";
  Triple += getVendorName();
  Triple += "-";
  Triple += getOSAndEnvironmentName();
  setTriple(Triple.str());
}

void Triple::setVendorName(const StringRef &Str) {