From 5ead8d3901d0c18240fbddbab28273dfb3c78bda Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Wed, 13 Feb 2013 18:38:58 +0000 Subject: [PATCH] [ms-inline-asm] Use an array_pod_sort, rather than a std:sort. llvm-svn: 175063 --- lib/MC/MCParser/AsmParser.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 0644ea341a3..2cce8b0e43f 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -13,6 +13,7 @@ #include "llvm/ADT/APFloat.h" #include "llvm/ADT/SmallString.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/Twine.h" #include "llvm/MC/MCAsmInfo.h" @@ -4029,8 +4030,14 @@ bool AsmParser::ParseDirectiveMSAlign(SMLoc IDLoc, ParseStatementInfo &Info) { return false; } -bool AsmStringSort (AsmRewrite A, AsmRewrite B) { - return A.Loc.getPointer() < B.Loc.getPointer(); +static int RewritesSort (const void *A, const void *B) { + const AsmRewrite *AsmRewriteA = static_cast(A); + const AsmRewrite *AsmRewriteB = static_cast(B); + if (AsmRewriteA->Loc.getPointer() < AsmRewriteB->Loc.getPointer()) + return -1; + if (AsmRewriteB->Loc.getPointer() < AsmRewriteA->Loc.getPointer()) + return 1; + return 0; } bool AsmParser::ParseMSInlineAsm(void *AsmLoc, std::string &AsmString, @@ -4157,7 +4164,7 @@ bool AsmParser::ParseMSInlineAsm(void *AsmLoc, std::string &AsmString, AsmRewriteKind PrevKind = AOK_Imm; raw_string_ostream OS(AsmStringIR); const char *Start = SrcMgr.getMemoryBuffer(0)->getBufferStart(); - std::sort (AsmStrRewrites.begin(), AsmStrRewrites.end(), AsmStringSort); + array_pod_sort (AsmStrRewrites.begin(), AsmStrRewrites.end(), RewritesSort); for (SmallVectorImpl::iterator I = AsmStrRewrites.begin(), E = AsmStrRewrites.end(); I != E; ++I) { const char *Loc = (*I).Loc.getPointer();