mirror of https://github.com/microsoft/clang.git
[clang] Change std::sort to llvm::sort in response to r327219
r327219 added wrappers to std::sort which randomly shuffle the container before sorting. This will help in uncovering non-determinism caused due to undefined sorting order of objects having the same key. To make use of that infrastructure we need to invoke llvm::sort instead of std::sort. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328636 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e37a191e99
commit
a4c6f25016
|
@ -1889,7 +1889,7 @@ def Target : InheritableAttr {
|
||||||
template<class Compare>
|
template<class Compare>
|
||||||
ParsedTargetAttr parse(Compare cmp) const {
|
ParsedTargetAttr parse(Compare cmp) const {
|
||||||
ParsedTargetAttr Attrs = parse();
|
ParsedTargetAttr Attrs = parse();
|
||||||
std::sort(std::begin(Attrs.Features), std::end(Attrs.Features), cmp);
|
llvm::sort(std::begin(Attrs.Features), std::end(Attrs.Features), cmp);
|
||||||
return Attrs;
|
return Attrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ public:
|
||||||
Builder &operator=(const Builder&) = delete;
|
Builder &operator=(const Builder&) = delete;
|
||||||
|
|
||||||
~Builder() {
|
~Builder() {
|
||||||
std::sort(Self.Rep.begin(), Self.Rep.end(), Compare());
|
llvm::sort(Self.Rep.begin(), Self.Rep.end(), Compare());
|
||||||
std::unique(Self.Rep.begin(), Self.Rep.end(),
|
std::unique(Self.Rep.begin(), Self.Rep.end(),
|
||||||
[](const_reference A, const_reference B) {
|
[](const_reference A, const_reference B) {
|
||||||
// FIXME: we should not allow any duplicate keys, but there are a lot of
|
// FIXME: we should not allow any duplicate keys, but there are a lot of
|
||||||
|
|
|
@ -2186,7 +2186,7 @@ structHasUniqueObjectRepresentations(const ASTContext &Context,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(
|
llvm::sort(
|
||||||
Bases.begin(), Bases.end(), [&](const std::pair<QualType, int64_t> &L,
|
Bases.begin(), Bases.end(), [&](const std::pair<QualType, int64_t> &L,
|
||||||
const std::pair<QualType, int64_t> &R) {
|
const std::pair<QualType, int64_t> &R) {
|
||||||
return Layout.getBaseClassOffset(L.first->getAsCXXRecordDecl()) <
|
return Layout.getBaseClassOffset(L.first->getAsCXXRecordDecl()) <
|
||||||
|
|
|
@ -323,7 +323,7 @@ class CXXNameMangler {
|
||||||
AdditionalAbiTags->end());
|
AdditionalAbiTags->end());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(TagList.begin(), TagList.end());
|
llvm::sort(TagList.begin(), TagList.end());
|
||||||
TagList.erase(std::unique(TagList.begin(), TagList.end()), TagList.end());
|
TagList.erase(std::unique(TagList.begin(), TagList.end()), TagList.end());
|
||||||
|
|
||||||
writeSortedUniqueAbiTags(Out, TagList);
|
writeSortedUniqueAbiTags(Out, TagList);
|
||||||
|
@ -339,7 +339,7 @@ class CXXNameMangler {
|
||||||
}
|
}
|
||||||
|
|
||||||
const AbiTagList &getSortedUniqueUsedAbiTags() {
|
const AbiTagList &getSortedUniqueUsedAbiTags() {
|
||||||
std::sort(UsedAbiTags.begin(), UsedAbiTags.end());
|
llvm::sort(UsedAbiTags.begin(), UsedAbiTags.end());
|
||||||
UsedAbiTags.erase(std::unique(UsedAbiTags.begin(), UsedAbiTags.end()),
|
UsedAbiTags.erase(std::unique(UsedAbiTags.begin(), UsedAbiTags.end()),
|
||||||
UsedAbiTags.end());
|
UsedAbiTags.end());
|
||||||
return UsedAbiTags;
|
return UsedAbiTags;
|
||||||
|
|
|
@ -2105,8 +2105,8 @@ void ItaniumVTableBuilder::dumpLayout(raw_ostream &Out) {
|
||||||
const CXXMethodDecl *MD = I.second;
|
const CXXMethodDecl *MD = I.second;
|
||||||
|
|
||||||
ThunkInfoVectorTy ThunksVector = Thunks[MD];
|
ThunkInfoVectorTy ThunksVector = Thunks[MD];
|
||||||
std::sort(ThunksVector.begin(), ThunksVector.end(),
|
llvm::sort(ThunksVector.begin(), ThunksVector.end(),
|
||||||
[](const ThunkInfo &LHS, const ThunkInfo &RHS) {
|
[](const ThunkInfo &LHS, const ThunkInfo &RHS) {
|
||||||
assert(LHS.Method == nullptr && RHS.Method == nullptr);
|
assert(LHS.Method == nullptr && RHS.Method == nullptr);
|
||||||
return std::tie(LHS.This, LHS.Return) < std::tie(RHS.This, RHS.Return);
|
return std::tie(LHS.This, LHS.Return) < std::tie(RHS.This, RHS.Return);
|
||||||
});
|
});
|
||||||
|
@ -2206,9 +2206,9 @@ VTableLayout::VTableLayout(ArrayRef<size_t> VTableIndices,
|
||||||
else
|
else
|
||||||
this->VTableIndices = OwningArrayRef<size_t>(VTableIndices);
|
this->VTableIndices = OwningArrayRef<size_t>(VTableIndices);
|
||||||
|
|
||||||
std::sort(this->VTableThunks.begin(), this->VTableThunks.end(),
|
llvm::sort(this->VTableThunks.begin(), this->VTableThunks.end(),
|
||||||
[](const VTableLayout::VTableThunkTy &LHS,
|
[](const VTableLayout::VTableThunkTy &LHS,
|
||||||
const VTableLayout::VTableThunkTy &RHS) {
|
const VTableLayout::VTableThunkTy &RHS) {
|
||||||
assert((LHS.first != RHS.first || LHS.second == RHS.second) &&
|
assert((LHS.first != RHS.first || LHS.second == RHS.second) &&
|
||||||
"Different thunks should have unique indices!");
|
"Different thunks should have unique indices!");
|
||||||
return LHS.first < RHS.first;
|
return LHS.first < RHS.first;
|
||||||
|
@ -3344,8 +3344,8 @@ static bool rebucketPaths(VPtrInfoVector &Paths) {
|
||||||
PathsSorted.reserve(Paths.size());
|
PathsSorted.reserve(Paths.size());
|
||||||
for (auto& P : Paths)
|
for (auto& P : Paths)
|
||||||
PathsSorted.push_back(*P);
|
PathsSorted.push_back(*P);
|
||||||
std::sort(PathsSorted.begin(), PathsSorted.end(),
|
llvm::sort(PathsSorted.begin(), PathsSorted.end(),
|
||||||
[](const VPtrInfo &LHS, const VPtrInfo &RHS) {
|
[](const VPtrInfo &LHS, const VPtrInfo &RHS) {
|
||||||
return LHS.MangledPath < RHS.MangledPath;
|
return LHS.MangledPath < RHS.MangledPath;
|
||||||
});
|
});
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
|
|
@ -619,8 +619,8 @@ Parser::completeExpression(StringRef Code, unsigned CompletionOffset, Sema *S,
|
||||||
P.parseExpressionImpl(&Dummy);
|
P.parseExpressionImpl(&Dummy);
|
||||||
|
|
||||||
// Sort by specificity, then by name.
|
// Sort by specificity, then by name.
|
||||||
std::sort(P.Completions.begin(), P.Completions.end(),
|
llvm::sort(P.Completions.begin(), P.Completions.end(),
|
||||||
[](const MatcherCompletion &A, const MatcherCompletion &B) {
|
[](const MatcherCompletion &A, const MatcherCompletion &B) {
|
||||||
if (A.Specificity != B.Specificity)
|
if (A.Specificity != B.Specificity)
|
||||||
return A.Specificity > B.Specificity;
|
return A.Specificity > B.Specificity;
|
||||||
return A.TypedText < B.TypedText;
|
return A.TypedText < B.TypedText;
|
||||||
|
|
|
@ -563,7 +563,7 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) {
|
||||||
it != ei; ++it) {
|
it != ei; ++it) {
|
||||||
vec.push_back(it->first);
|
vec.push_back(it->first);
|
||||||
}
|
}
|
||||||
std::sort(vec.begin(), vec.end(), [](const CFGBlock *A, const CFGBlock *B) {
|
llvm::sort(vec.begin(), vec.end(), [](const CFGBlock *A, const CFGBlock *B) {
|
||||||
return A->getBlockID() < B->getBlockID();
|
return A->getBlockID() < B->getBlockID();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -583,7 +583,8 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) {
|
||||||
declVec.push_back(*si);
|
declVec.push_back(*si);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(declVec.begin(), declVec.end(), [](const Decl *A, const Decl *B) {
|
llvm::sort(declVec.begin(), declVec.end(),
|
||||||
|
[](const Decl *A, const Decl *B) {
|
||||||
return A->getLocStart() < B->getLocStart();
|
return A->getLocStart() < B->getLocStart();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1812,8 +1812,8 @@ void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,
|
||||||
}
|
}
|
||||||
|
|
||||||
void YAMLVFSWriter::write(llvm::raw_ostream &OS) {
|
void YAMLVFSWriter::write(llvm::raw_ostream &OS) {
|
||||||
std::sort(Mappings.begin(), Mappings.end(),
|
llvm::sort(Mappings.begin(), Mappings.end(),
|
||||||
[](const YAMLVFSEntry &LHS, const YAMLVFSEntry &RHS) {
|
[](const YAMLVFSEntry &LHS, const YAMLVFSEntry &RHS) {
|
||||||
return LHS.VPath < RHS.VPath;
|
return LHS.VPath < RHS.VPath;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -992,8 +992,8 @@ void CodeGenModule::EmitVTableTypeMetadata(llvm::GlobalVariable *VTable,
|
||||||
AP.second.AddressPointIndex));
|
AP.second.AddressPointIndex));
|
||||||
|
|
||||||
// Sort the bit set entries for determinism.
|
// Sort the bit set entries for determinism.
|
||||||
std::sort(BitsetEntries.begin(), BitsetEntries.end(),
|
llvm::sort(BitsetEntries.begin(), BitsetEntries.end(),
|
||||||
[this](const BSEntry &E1, const BSEntry &E2) {
|
[this](const BSEntry &E1, const BSEntry &E2) {
|
||||||
if (&E1 == &E2)
|
if (&E1 == &E2)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -1294,7 +1294,7 @@ bool CodeGenModule::GetCPUAndFeaturesAttributes(const Decl *D,
|
||||||
AddedAttr = true;
|
AddedAttr = true;
|
||||||
}
|
}
|
||||||
if (!Features.empty()) {
|
if (!Features.empty()) {
|
||||||
std::sort(Features.begin(), Features.end());
|
llvm::sort(Features.begin(), Features.end());
|
||||||
Attrs.addAttribute("target-features", llvm::join(Features, ","));
|
Attrs.addAttribute("target-features", llvm::join(Features, ","));
|
||||||
AddedAttr = true;
|
AddedAttr = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8513,7 +8513,7 @@ static bool appendRecordType(SmallStringEnc &Enc, const RecordType *RT,
|
||||||
// The ABI requires unions to be sorted but not structures.
|
// The ABI requires unions to be sorted but not structures.
|
||||||
// See FieldEncoding::operator< for sort algorithm.
|
// See FieldEncoding::operator< for sort algorithm.
|
||||||
if (RT->isUnionType())
|
if (RT->isUnionType())
|
||||||
std::sort(FE.begin(), FE.end());
|
llvm::sort(FE.begin(), FE.end());
|
||||||
// We can now complete the TypeString.
|
// We can now complete the TypeString.
|
||||||
unsigned E = FE.size();
|
unsigned E = FE.size();
|
||||||
for (unsigned I = 0; I != E; ++I) {
|
for (unsigned I = 0; I != E; ++I) {
|
||||||
|
@ -8557,7 +8557,7 @@ static bool appendEnumType(SmallStringEnc &Enc, const EnumType *ET,
|
||||||
EnumEnc += '}';
|
EnumEnc += '}';
|
||||||
FE.push_back(FieldEncoding(!I->getName().empty(), EnumEnc));
|
FE.push_back(FieldEncoding(!I->getName().empty(), EnumEnc));
|
||||||
}
|
}
|
||||||
std::sort(FE.begin(), FE.end());
|
llvm::sort(FE.begin(), FE.end());
|
||||||
unsigned E = FE.size();
|
unsigned E = FE.size();
|
||||||
for (unsigned I = 0; I != E; ++I) {
|
for (unsigned I = 0; I != E; ++I) {
|
||||||
if (I)
|
if (I)
|
||||||
|
|
|
@ -1474,11 +1474,11 @@ void Driver::HandleAutocompletions(StringRef PassedFlags) const {
|
||||||
// deterministic order. We could sort in any way, but we chose
|
// deterministic order. We could sort in any way, but we chose
|
||||||
// case-insensitive sorting for consistency with the -help option
|
// case-insensitive sorting for consistency with the -help option
|
||||||
// which prints out options in the case-insensitive alphabetical order.
|
// which prints out options in the case-insensitive alphabetical order.
|
||||||
std::sort(SuggestedCompletions.begin(), SuggestedCompletions.end(),
|
llvm::sort(SuggestedCompletions.begin(), SuggestedCompletions.end(),
|
||||||
[](StringRef A, StringRef B) {
|
[](StringRef A, StringRef B) {
|
||||||
if (int X = A.compare_lower(B))
|
if (int X = A.compare_lower(B))
|
||||||
return X < 0;
|
return X < 0;
|
||||||
return A.compare(B) > 0;
|
return A.compare(B) > 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
llvm::outs() << llvm::join(SuggestedCompletions, "\n") << '\n';
|
llvm::outs() << llvm::join(SuggestedCompletions, "\n") << '\n';
|
||||||
|
|
|
@ -38,7 +38,7 @@ FormatTokenLexer::FormatTokenLexer(const SourceManager &SourceMgr, FileID ID,
|
||||||
|
|
||||||
for (const std::string &ForEachMacro : Style.ForEachMacros)
|
for (const std::string &ForEachMacro : Style.ForEachMacros)
|
||||||
ForEachMacros.push_back(&IdentTable.get(ForEachMacro));
|
ForEachMacros.push_back(&IdentTable.get(ForEachMacro));
|
||||||
std::sort(ForEachMacros.begin(), ForEachMacros.end());
|
llvm::sort(ForEachMacros.begin(), ForEachMacros.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayRef<FormatToken *> FormatTokenLexer::lex() {
|
ArrayRef<FormatToken *> FormatTokenLexer::lex() {
|
||||||
|
|
|
@ -90,7 +90,7 @@ const tooling::Replacements &WhitespaceManager::generateReplacements() {
|
||||||
if (Changes.empty())
|
if (Changes.empty())
|
||||||
return Replaces;
|
return Replaces;
|
||||||
|
|
||||||
std::sort(Changes.begin(), Changes.end(), Change::IsBeforeInFile(SourceMgr));
|
llvm::sort(Changes.begin(), Changes.end(), Change::IsBeforeInFile(SourceMgr));
|
||||||
calculateLineBreakInformation();
|
calculateLineBreakInformation();
|
||||||
alignConsecutiveDeclarations();
|
alignConsecutiveDeclarations();
|
||||||
alignConsecutiveAssignments();
|
alignConsecutiveAssignments();
|
||||||
|
|
|
@ -1278,7 +1278,7 @@ bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
|
||||||
Success = false;
|
Success = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
std::sort(Opts.VerifyPrefixes.begin(), Opts.VerifyPrefixes.end());
|
llvm::sort(Opts.VerifyPrefixes.begin(), Opts.VerifyPrefixes.end());
|
||||||
DiagnosticLevelMask DiagMask = DiagnosticLevelMask::None;
|
DiagnosticLevelMask DiagMask = DiagnosticLevelMask::None;
|
||||||
Success &= parseDiagnosticLevelMask("-verify-ignore-unexpected=",
|
Success &= parseDiagnosticLevelMask("-verify-ignore-unexpected=",
|
||||||
Args.getAllArgValues(OPT_verify_ignore_unexpected_EQ),
|
Args.getAllArgValues(OPT_verify_ignore_unexpected_EQ),
|
||||||
|
@ -2409,7 +2409,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
Opts.CurrentModule = Opts.ModuleName;
|
Opts.CurrentModule = Opts.ModuleName;
|
||||||
Opts.AppExt = Args.hasArg(OPT_fapplication_extension);
|
Opts.AppExt = Args.hasArg(OPT_fapplication_extension);
|
||||||
Opts.ModuleFeatures = Args.getAllArgValues(OPT_fmodule_feature);
|
Opts.ModuleFeatures = Args.getAllArgValues(OPT_fmodule_feature);
|
||||||
std::sort(Opts.ModuleFeatures.begin(), Opts.ModuleFeatures.end());
|
llvm::sort(Opts.ModuleFeatures.begin(), Opts.ModuleFeatures.end());
|
||||||
Opts.NativeHalfType |= Args.hasArg(OPT_fnative_half_type);
|
Opts.NativeHalfType |= Args.hasArg(OPT_fnative_half_type);
|
||||||
Opts.NativeHalfArgsAndReturns |= Args.hasArg(OPT_fnative_half_arguments_and_returns);
|
Opts.NativeHalfArgsAndReturns |= Args.hasArg(OPT_fnative_half_arguments_and_returns);
|
||||||
// Enable HalfArgsAndReturns if present in Args or if NativeHalfArgsAndReturns
|
// Enable HalfArgsAndReturns if present in Args or if NativeHalfArgsAndReturns
|
||||||
|
|
|
@ -324,8 +324,8 @@ static void computeCommonMacroArgExpansionFileIDs(
|
||||||
SmallVector<FileID, 4> EndArgExpansions;
|
SmallVector<FileID, 4> EndArgExpansions;
|
||||||
getMacroArgExpansionFileIDs(Begin, BeginArgExpansions, /*IsBegin=*/true, SM);
|
getMacroArgExpansionFileIDs(Begin, BeginArgExpansions, /*IsBegin=*/true, SM);
|
||||||
getMacroArgExpansionFileIDs(End, EndArgExpansions, /*IsBegin=*/false, SM);
|
getMacroArgExpansionFileIDs(End, EndArgExpansions, /*IsBegin=*/false, SM);
|
||||||
std::sort(BeginArgExpansions.begin(), BeginArgExpansions.end());
|
llvm::sort(BeginArgExpansions.begin(), BeginArgExpansions.end());
|
||||||
std::sort(EndArgExpansions.begin(), EndArgExpansions.end());
|
llvm::sort(EndArgExpansions.begin(), EndArgExpansions.end());
|
||||||
std::set_intersection(BeginArgExpansions.begin(), BeginArgExpansions.end(),
|
std::set_intersection(BeginArgExpansions.begin(), BeginArgExpansions.end(),
|
||||||
EndArgExpansions.begin(), EndArgExpansions.end(),
|
EndArgExpansions.begin(), EndArgExpansions.end(),
|
||||||
std::back_inserter(CommonArgExpansions));
|
std::back_inserter(CommonArgExpansions));
|
||||||
|
|
|
@ -1388,8 +1388,8 @@ static void diagnoseRepeatedUseOfWeak(Sema &S,
|
||||||
|
|
||||||
// Sort by first use so that we emit the warnings in a deterministic order.
|
// Sort by first use so that we emit the warnings in a deterministic order.
|
||||||
SourceManager &SM = S.getSourceManager();
|
SourceManager &SM = S.getSourceManager();
|
||||||
std::sort(UsesByStmt.begin(), UsesByStmt.end(),
|
llvm::sort(UsesByStmt.begin(), UsesByStmt.end(),
|
||||||
[&SM](const StmtUsesPair &LHS, const StmtUsesPair &RHS) {
|
[&SM](const StmtUsesPair &LHS, const StmtUsesPair &RHS) {
|
||||||
return SM.isBeforeInTranslationUnit(LHS.first->getLocStart(),
|
return SM.isBeforeInTranslationUnit(LHS.first->getLocStart(),
|
||||||
RHS.first->getLocStart());
|
RHS.first->getLocStart());
|
||||||
});
|
});
|
||||||
|
@ -1527,8 +1527,8 @@ public:
|
||||||
// Sort the uses by their SourceLocations. While not strictly
|
// Sort the uses by their SourceLocations. While not strictly
|
||||||
// guaranteed to produce them in line/column order, this will provide
|
// guaranteed to produce them in line/column order, this will provide
|
||||||
// a stable ordering.
|
// a stable ordering.
|
||||||
std::sort(vec->begin(), vec->end(),
|
llvm::sort(vec->begin(), vec->end(),
|
||||||
[](const UninitUse &a, const UninitUse &b) {
|
[](const UninitUse &a, const UninitUse &b) {
|
||||||
// Prefer a more confident report over a less confident one.
|
// Prefer a more confident report over a less confident one.
|
||||||
if (a.getKind() != b.getKind())
|
if (a.getKind() != b.getKind())
|
||||||
return a.getKind() > b.getKind();
|
return a.getKind() > b.getKind();
|
||||||
|
|
|
@ -9375,7 +9375,7 @@ static bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD,
|
||||||
|
|
||||||
TargetAttr::ParsedTargetAttr NewParsed = NewTA->parse();
|
TargetAttr::ParsedTargetAttr NewParsed = NewTA->parse();
|
||||||
// Sort order doesn't matter, it just needs to be consistent.
|
// Sort order doesn't matter, it just needs to be consistent.
|
||||||
std::sort(NewParsed.Features.begin(), NewParsed.Features.end());
|
llvm::sort(NewParsed.Features.begin(), NewParsed.Features.end());
|
||||||
|
|
||||||
const auto *OldTA = OldFD->getAttr<TargetAttr>();
|
const auto *OldTA = OldFD->getAttr<TargetAttr>();
|
||||||
if (!OldFD->isMultiVersion()) {
|
if (!OldFD->isMultiVersion()) {
|
||||||
|
|
|
@ -5051,7 +5051,7 @@ static void handleAbiTagAttr(Sema &S, Decl *D, const AttributeList &AL) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Store tags sorted and without duplicates.
|
// Store tags sorted and without duplicates.
|
||||||
std::sort(Tags.begin(), Tags.end());
|
llvm::sort(Tags.begin(), Tags.end());
|
||||||
Tags.erase(std::unique(Tags.begin(), Tags.end()), Tags.end());
|
Tags.erase(std::unique(Tags.begin(), Tags.end()), Tags.end());
|
||||||
|
|
||||||
D->addAttr(::new (S.Context)
|
D->addAttr(::new (S.Context)
|
||||||
|
|
|
@ -187,7 +187,7 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
void done() {
|
void done() {
|
||||||
std::sort(list.begin(), list.end(), UnqualUsingEntry::Comparator());
|
llvm::sort(list.begin(), list.end(), UnqualUsingEntry::Comparator());
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef ListTy::const_iterator const_iterator;
|
typedef ListTy::const_iterator const_iterator;
|
||||||
|
|
|
@ -10688,8 +10688,8 @@ void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
|
||||||
// in general, want to list every possible builtin candidate.
|
// in general, want to list every possible builtin candidate.
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(Cands.begin(), Cands.end(),
|
llvm::sort(Cands.begin(), Cands.end(),
|
||||||
CompareTemplateSpecCandidatesForDisplay(S));
|
CompareTemplateSpecCandidatesForDisplay(S));
|
||||||
|
|
||||||
// FIXME: Perhaps rename OverloadsShown and getShowOverloads()
|
// FIXME: Perhaps rename OverloadsShown and getShowOverloads()
|
||||||
// for generalization purposes (?).
|
// for generalization purposes (?).
|
||||||
|
|
|
@ -4861,8 +4861,8 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
|
||||||
if (Chunk.Fun.TypeQuals & Qualifiers::Restrict)
|
if (Chunk.Fun.TypeQuals & Qualifiers::Restrict)
|
||||||
RemovalLocs.push_back(Chunk.Fun.getRestrictQualifierLoc());
|
RemovalLocs.push_back(Chunk.Fun.getRestrictQualifierLoc());
|
||||||
if (!RemovalLocs.empty()) {
|
if (!RemovalLocs.empty()) {
|
||||||
std::sort(RemovalLocs.begin(), RemovalLocs.end(),
|
llvm::sort(RemovalLocs.begin(), RemovalLocs.end(),
|
||||||
BeforeThanCompare<SourceLocation>(S.getSourceManager()));
|
BeforeThanCompare<SourceLocation>(S.getSourceManager()));
|
||||||
RemovalRange = SourceRange(RemovalLocs.front(), RemovalLocs.back());
|
RemovalRange = SourceRange(RemovalLocs.front(), RemovalLocs.back());
|
||||||
Loc = RemovalLocs.front();
|
Loc = RemovalLocs.front();
|
||||||
}
|
}
|
||||||
|
|
|
@ -396,8 +396,8 @@ static bool checkTargetOptions(const TargetOptions &TargetOpts,
|
||||||
ExistingTargetOpts.FeaturesAsWritten.end());
|
ExistingTargetOpts.FeaturesAsWritten.end());
|
||||||
SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
|
SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
|
||||||
TargetOpts.FeaturesAsWritten.end());
|
TargetOpts.FeaturesAsWritten.end());
|
||||||
std::sort(ExistingFeatures.begin(), ExistingFeatures.end());
|
llvm::sort(ExistingFeatures.begin(), ExistingFeatures.end());
|
||||||
std::sort(ReadFeatures.begin(), ReadFeatures.end());
|
llvm::sort(ReadFeatures.begin(), ReadFeatures.end());
|
||||||
|
|
||||||
// We compute the set difference in both directions explicitly so that we can
|
// We compute the set difference in both directions explicitly so that we can
|
||||||
// diagnose the differences differently.
|
// diagnose the differences differently.
|
||||||
|
@ -9078,8 +9078,8 @@ void ASTReader::ReadComments() {
|
||||||
NextCursor:
|
NextCursor:
|
||||||
// De-serialized SourceLocations get negative FileIDs for other modules,
|
// De-serialized SourceLocations get negative FileIDs for other modules,
|
||||||
// potentially invalidating the original order. Sort it again.
|
// potentially invalidating the original order. Sort it again.
|
||||||
std::sort(Comments.begin(), Comments.end(),
|
llvm::sort(Comments.begin(), Comments.end(),
|
||||||
BeforeThanCompare<RawComment>(SourceMgr));
|
BeforeThanCompare<RawComment>(SourceMgr));
|
||||||
Context.Comments.addDeserializedComments(Comments);
|
Context.Comments.addDeserializedComments(Comments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,7 +232,7 @@ namespace clang {
|
||||||
|
|
||||||
if (auto &Old = LazySpecializations) {
|
if (auto &Old = LazySpecializations) {
|
||||||
IDs.insert(IDs.end(), Old + 1, Old + 1 + Old[0]);
|
IDs.insert(IDs.end(), Old + 1, Old + 1 + Old[0]);
|
||||||
std::sort(IDs.begin(), IDs.end());
|
llvm::sort(IDs.begin(), IDs.end());
|
||||||
IDs.erase(std::unique(IDs.begin(), IDs.end()), IDs.end());
|
IDs.erase(std::unique(IDs.begin(), IDs.end()), IDs.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2483,8 +2483,8 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) {
|
||||||
MacroIdentifiers.push_back(Id.second);
|
MacroIdentifiers.push_back(Id.second);
|
||||||
// Sort the set of macro definitions that need to be serialized by the
|
// Sort the set of macro definitions that need to be serialized by the
|
||||||
// name of the macro, to provide a stable ordering.
|
// name of the macro, to provide a stable ordering.
|
||||||
std::sort(MacroIdentifiers.begin(), MacroIdentifiers.end(),
|
llvm::sort(MacroIdentifiers.begin(), MacroIdentifiers.end(),
|
||||||
llvm::less_ptr<IdentifierInfo>());
|
llvm::less_ptr<IdentifierInfo>());
|
||||||
|
|
||||||
// Emit the macro directives as a list and associate the offset with the
|
// Emit the macro directives as a list and associate the offset with the
|
||||||
// identifier they belong to.
|
// identifier they belong to.
|
||||||
|
@ -3216,8 +3216,8 @@ void ASTWriter::WriteFileDeclIDsMap() {
|
||||||
|
|
||||||
SmallVector<std::pair<FileID, DeclIDInFileInfo *>, 64> SortedFileDeclIDs(
|
SmallVector<std::pair<FileID, DeclIDInFileInfo *>, 64> SortedFileDeclIDs(
|
||||||
FileDeclIDs.begin(), FileDeclIDs.end());
|
FileDeclIDs.begin(), FileDeclIDs.end());
|
||||||
std::sort(SortedFileDeclIDs.begin(), SortedFileDeclIDs.end(),
|
llvm::sort(SortedFileDeclIDs.begin(), SortedFileDeclIDs.end(),
|
||||||
llvm::less_first());
|
llvm::less_first());
|
||||||
|
|
||||||
// Join the vectors of DeclIDs from all files.
|
// Join the vectors of DeclIDs from all files.
|
||||||
SmallVector<DeclID, 256> FileGroupedDeclIDs;
|
SmallVector<DeclID, 256> FileGroupedDeclIDs;
|
||||||
|
@ -3721,7 +3721,7 @@ void ASTWriter::WriteIdentifierTable(Preprocessor &PP,
|
||||||
IIs.push_back(ID.second);
|
IIs.push_back(ID.second);
|
||||||
// Sort the identifiers lexicographically before getting them references so
|
// Sort the identifiers lexicographically before getting them references so
|
||||||
// that their order is stable.
|
// that their order is stable.
|
||||||
std::sort(IIs.begin(), IIs.end(), llvm::less_ptr<IdentifierInfo>());
|
llvm::sort(IIs.begin(), IIs.end(), llvm::less_ptr<IdentifierInfo>());
|
||||||
for (const IdentifierInfo *II : IIs)
|
for (const IdentifierInfo *II : IIs)
|
||||||
if (Trait.isInterestingNonMacroIdentifier(II))
|
if (Trait.isInterestingNonMacroIdentifier(II))
|
||||||
getIdentifierRef(II);
|
getIdentifierRef(II);
|
||||||
|
@ -4019,7 +4019,7 @@ ASTWriter::GenerateNameLookupTable(const DeclContext *ConstDC,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort the names into a stable order.
|
// Sort the names into a stable order.
|
||||||
std::sort(Names.begin(), Names.end());
|
llvm::sort(Names.begin(), Names.end());
|
||||||
|
|
||||||
if (auto *D = dyn_cast<CXXRecordDecl>(DC)) {
|
if (auto *D = dyn_cast<CXXRecordDecl>(DC)) {
|
||||||
// We need to establish an ordering of constructor and conversion function
|
// We need to establish an ordering of constructor and conversion function
|
||||||
|
@ -4156,7 +4156,7 @@ uint64_t ASTWriter::WriteDeclContextVisibleBlock(ASTContext &Context,
|
||||||
std::make_pair(Entry.first, Entry.second.getLookupResult()));
|
std::make_pair(Entry.first, Entry.second.getLookupResult()));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(LookupResults.begin(), LookupResults.end(), llvm::less_first());
|
llvm::sort(LookupResults.begin(), LookupResults.end(), llvm::less_first());
|
||||||
for (auto &NameAndResult : LookupResults) {
|
for (auto &NameAndResult : LookupResults) {
|
||||||
DeclarationName Name = NameAndResult.first;
|
DeclarationName Name = NameAndResult.first;
|
||||||
DeclContext::lookup_result Result = NameAndResult.second;
|
DeclContext::lookup_result Result = NameAndResult.second;
|
||||||
|
@ -4852,7 +4852,7 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot,
|
||||||
IIs.push_back(II);
|
IIs.push_back(II);
|
||||||
}
|
}
|
||||||
// Sort the identifiers to visit based on their name.
|
// Sort the identifiers to visit based on their name.
|
||||||
std::sort(IIs.begin(), IIs.end(), llvm::less_ptr<IdentifierInfo>());
|
llvm::sort(IIs.begin(), IIs.end(), llvm::less_ptr<IdentifierInfo>());
|
||||||
for (const IdentifierInfo *II : IIs) {
|
for (const IdentifierInfo *II : IIs) {
|
||||||
for (IdentifierResolver::iterator D = SemaRef.IdResolver.begin(II),
|
for (IdentifierResolver::iterator D = SemaRef.IdResolver.begin(II),
|
||||||
DEnd = SemaRef.IdResolver.end();
|
DEnd = SemaRef.IdResolver.end();
|
||||||
|
@ -5089,7 +5089,7 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Sort and deduplicate module IDs.
|
// Sort and deduplicate module IDs.
|
||||||
std::sort(Imports.begin(), Imports.end(), Cmp);
|
llvm::sort(Imports.begin(), Imports.end(), Cmp);
|
||||||
Imports.erase(std::unique(Imports.begin(), Imports.end(), Eq),
|
Imports.erase(std::unique(Imports.begin(), Imports.end(), Eq),
|
||||||
Imports.end());
|
Imports.end());
|
||||||
|
|
||||||
|
|
|
@ -237,7 +237,7 @@ public:
|
||||||
};
|
};
|
||||||
std::transform(RD->field_begin(), RD->field_end(),
|
std::transform(RD->field_begin(), RD->field_end(),
|
||||||
std::back_inserter(Fields), GatherSizesAndAlignments);
|
std::back_inserter(Fields), GatherSizesAndAlignments);
|
||||||
std::sort(Fields.begin(), Fields.end());
|
llvm::sort(Fields.begin(), Fields.end());
|
||||||
// This lets us skip over vptrs and non-virtual bases,
|
// This lets us skip over vptrs and non-virtual bases,
|
||||||
// so that we can just worry about the fields in our object.
|
// so that we can just worry about the fields in our object.
|
||||||
// Note that this does cause us to miss some cases where we
|
// Note that this does cause us to miss some cases where we
|
||||||
|
|
|
@ -2947,8 +2947,8 @@ TrimmedGraph::TrimmedGraph(const ExplodedGraph *OriginalGraph,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort the error paths from longest to shortest.
|
// Sort the error paths from longest to shortest.
|
||||||
std::sort(ReportNodes.begin(), ReportNodes.end(),
|
llvm::sort(ReportNodes.begin(), ReportNodes.end(),
|
||||||
PriorityCompare<true>(PriorityMap));
|
PriorityCompare<true>(PriorityMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TrimmedGraph::popNextReportGraph(ReportGraph &GraphWrapper) {
|
bool TrimmedGraph::popNextReportGraph(ReportGraph &GraphWrapper) {
|
||||||
|
|
|
@ -97,7 +97,7 @@ void CheckerRegistry::addChecker(InitializationFunction fn, StringRef name,
|
||||||
void CheckerRegistry::initializeManager(CheckerManager &checkerMgr,
|
void CheckerRegistry::initializeManager(CheckerManager &checkerMgr,
|
||||||
SmallVectorImpl<CheckerOptInfo> &opts) const {
|
SmallVectorImpl<CheckerOptInfo> &opts) const {
|
||||||
// Sort checkers for efficient collection.
|
// Sort checkers for efficient collection.
|
||||||
std::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
llvm::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
||||||
|
|
||||||
// Collect checkers enabled by the options.
|
// Collect checkers enabled by the options.
|
||||||
CheckerInfoSet enabledCheckers;
|
CheckerInfoSet enabledCheckers;
|
||||||
|
@ -141,7 +141,7 @@ void CheckerRegistry::printHelp(raw_ostream &out,
|
||||||
// FIXME: Alphabetical sort puts 'experimental' in the middle.
|
// FIXME: Alphabetical sort puts 'experimental' in the middle.
|
||||||
// Would it be better to name it '~experimental' or something else
|
// Would it be better to name it '~experimental' or something else
|
||||||
// that's ASCIIbetically last?
|
// that's ASCIIbetically last?
|
||||||
std::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
llvm::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
||||||
|
|
||||||
// FIXME: Print available packages.
|
// FIXME: Print available packages.
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ void CheckerRegistry::printHelp(raw_ostream &out,
|
||||||
|
|
||||||
void CheckerRegistry::printList(
|
void CheckerRegistry::printList(
|
||||||
raw_ostream &out, SmallVectorImpl<CheckerOptInfo> &opts) const {
|
raw_ostream &out, SmallVectorImpl<CheckerOptInfo> &opts) const {
|
||||||
std::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
llvm::sort(Checkers.begin(), Checkers.end(), checkerNameLT);
|
||||||
|
|
||||||
// Collect checkers enabled by the options.
|
// Collect checkers enabled by the options.
|
||||||
CheckerInfoSet enabledCheckers;
|
CheckerInfoSet enabledCheckers;
|
||||||
|
|
|
@ -741,7 +741,7 @@ public:
|
||||||
List.pop();
|
List.pop();
|
||||||
}
|
}
|
||||||
// TODO this is here to get a stable output, not a good heuristic
|
// TODO this is here to get a stable output, not a good heuristic
|
||||||
std::sort(Result.begin(), Result.end());
|
llvm::sort(Result.begin(), Result.end());
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
int peekMax() const {
|
int peekMax() const {
|
||||||
|
|
|
@ -483,11 +483,11 @@ Replacements Replacements::merge(const Replacements &ReplacesToMerge) const {
|
||||||
// Returns a set of non-overlapping and sorted ranges that is equivalent to
|
// Returns a set of non-overlapping and sorted ranges that is equivalent to
|
||||||
// \p Ranges.
|
// \p Ranges.
|
||||||
static std::vector<Range> combineAndSortRanges(std::vector<Range> Ranges) {
|
static std::vector<Range> combineAndSortRanges(std::vector<Range> Ranges) {
|
||||||
std::sort(Ranges.begin(), Ranges.end(),
|
llvm::sort(Ranges.begin(), Ranges.end(),
|
||||||
[](const Range &LHS, const Range &RHS) {
|
[](const Range &LHS, const Range &RHS) {
|
||||||
if (LHS.getOffset() != RHS.getOffset())
|
if (LHS.getOffset() != RHS.getOffset())
|
||||||
return LHS.getOffset() < RHS.getOffset();
|
return LHS.getOffset() < RHS.getOffset();
|
||||||
return LHS.getLength() < RHS.getLength();
|
return LHS.getLength() < RHS.getLength();
|
||||||
});
|
});
|
||||||
std::vector<Range> Result;
|
std::vector<Range> Result;
|
||||||
for (const auto &R : Ranges) {
|
for (const auto &R : Ranges) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ void DiagTools::printCommands(llvm::raw_ostream &out) {
|
||||||
if (len > maxName)
|
if (len > maxName)
|
||||||
maxName = len;
|
maxName = len;
|
||||||
}
|
}
|
||||||
std::sort(toolNames.begin(), toolNames.end());
|
llvm::sort(toolNames.begin(), toolNames.end());
|
||||||
|
|
||||||
for (std::vector<llvm::StringRef>::iterator it = toolNames.begin(),
|
for (std::vector<llvm::StringRef>::iterator it = toolNames.begin(),
|
||||||
ei = toolNames.end(); it != ei; ++it) {
|
ei = toolNames.end(); it != ei; ++it) {
|
||||||
|
|
|
@ -1039,8 +1039,8 @@ bool CursorVisitor::VisitObjCContainerDecl(ObjCContainerDecl *D) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now sort the Decls so that they appear in lexical order.
|
// Now sort the Decls so that they appear in lexical order.
|
||||||
std::sort(DeclsInContainer.begin(), DeclsInContainer.end(),
|
llvm::sort(DeclsInContainer.begin(), DeclsInContainer.end(),
|
||||||
[&SM](Decl *A, Decl *B) {
|
[&SM](Decl *A, Decl *B) {
|
||||||
SourceLocation L_A = A->getLocStart();
|
SourceLocation L_A = A->getLocStart();
|
||||||
SourceLocation L_B = B->getLocStart();
|
SourceLocation L_B = B->getLocStart();
|
||||||
return L_A != L_B ?
|
return L_A != L_B ?
|
||||||
|
@ -7573,10 +7573,10 @@ static void getCursorPlatformAvailabilityForDecl(
|
||||||
if (AvailabilityAttrs.empty())
|
if (AvailabilityAttrs.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::sort(AvailabilityAttrs.begin(), AvailabilityAttrs.end(),
|
llvm::sort(AvailabilityAttrs.begin(), AvailabilityAttrs.end(),
|
||||||
[](AvailabilityAttr *LHS, AvailabilityAttr *RHS) {
|
[](AvailabilityAttr *LHS, AvailabilityAttr *RHS) {
|
||||||
return LHS->getPlatform()->getName() <
|
return LHS->getPlatform()->getName() <
|
||||||
RHS->getPlatform()->getName();
|
RHS->getPlatform()->getName();
|
||||||
});
|
});
|
||||||
ASTContext &Ctx = D->getASTContext();
|
ASTContext &Ctx = D->getASTContext();
|
||||||
auto It = std::unique(
|
auto It = std::unique(
|
||||||
|
|
|
@ -471,7 +471,7 @@ TEST(VirtualFileSystemTest, BrokenSymlinkRealFSRecursiveIteration) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check sorted contents.
|
// Check sorted contents.
|
||||||
std::sort(Contents.begin(), Contents.end());
|
llvm::sort(Contents.begin(), Contents.end());
|
||||||
EXPECT_EQ(Expected.size(), Contents.size());
|
EXPECT_EQ(Expected.size(), Contents.size());
|
||||||
EXPECT_TRUE(std::equal(Contents.begin(), Contents.end(), Expected.begin()));
|
EXPECT_TRUE(std::equal(Contents.begin(), Contents.end(), Expected.begin()));
|
||||||
}
|
}
|
||||||
|
@ -488,8 +488,8 @@ static void checkContents(DirIter I, ArrayRef<StringRef> ExpectedOut) {
|
||||||
for (DirIter E; !EC && I != E; I.increment(EC))
|
for (DirIter E; !EC && I != E; I.increment(EC))
|
||||||
InputToCheck.push_back(I->getName());
|
InputToCheck.push_back(I->getName());
|
||||||
|
|
||||||
std::sort(InputToCheck.begin(), InputToCheck.end());
|
llvm::sort(InputToCheck.begin(), InputToCheck.end());
|
||||||
std::sort(Expected.begin(), Expected.end());
|
llvm::sort(Expected.begin(), Expected.end());
|
||||||
EXPECT_EQ(InputToCheck.size(), Expected.size());
|
EXPECT_EQ(InputToCheck.size(), Expected.size());
|
||||||
|
|
||||||
unsigned LastElt = std::min(InputToCheck.size(), Expected.size());
|
unsigned LastElt = std::min(InputToCheck.size(), Expected.size());
|
||||||
|
|
|
@ -3908,9 +3908,9 @@ void EmitClangAttrDocs(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
for (auto &I : SplitDocs) {
|
for (auto &I : SplitDocs) {
|
||||||
WriteCategoryHeader(I.first, OS);
|
WriteCategoryHeader(I.first, OS);
|
||||||
|
|
||||||
std::sort(I.second.begin(), I.second.end(),
|
llvm::sort(I.second.begin(), I.second.end(),
|
||||||
[](const DocumentationData &D1, const DocumentationData &D2) {
|
[](const DocumentationData &D1, const DocumentationData &D2) {
|
||||||
return D1.Heading < D2.Heading;
|
return D1.Heading < D2.Heading;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Walk over each of the attributes in the category and write out their
|
// Walk over each of the attributes in the category and write out their
|
||||||
|
|
|
@ -207,9 +207,9 @@ static void groupDiagnostics(const std::vector<Record*> &Diags,
|
||||||
E = SortedGroups.end();
|
E = SortedGroups.end();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
MutableArrayRef<const Record *> GroupDiags = (*I)->DiagsInGroup;
|
MutableArrayRef<const Record *> GroupDiags = (*I)->DiagsInGroup;
|
||||||
std::sort(GroupDiags.begin(), GroupDiags.end(), beforeThanCompare);
|
llvm::sort(GroupDiags.begin(), GroupDiags.end(), beforeThanCompare);
|
||||||
}
|
}
|
||||||
std::sort(SortedGroups.begin(), SortedGroups.end(), beforeThanCompareGroups);
|
llvm::sort(SortedGroups.begin(), SortedGroups.end(), beforeThanCompareGroups);
|
||||||
|
|
||||||
// Warn about the same group being used anonymously in multiple places.
|
// Warn about the same group being used anonymously in multiple places.
|
||||||
for (SmallVectorImpl<GroupInfo *>::const_iterator I = SortedGroups.begin(),
|
for (SmallVectorImpl<GroupInfo *>::const_iterator I = SortedGroups.begin(),
|
||||||
|
@ -863,9 +863,10 @@ void EmitClangDiagsIndexName(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
Index.push_back(RecordIndexElement(R));
|
Index.push_back(RecordIndexElement(R));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(Index.begin(), Index.end(),
|
llvm::sort(Index.begin(), Index.end(),
|
||||||
[](const RecordIndexElement &Lhs,
|
[](const RecordIndexElement &Lhs, const RecordIndexElement &Rhs) {
|
||||||
const RecordIndexElement &Rhs) { return Lhs.Name < Rhs.Name; });
|
return Lhs.Name < Rhs.Name;
|
||||||
|
});
|
||||||
|
|
||||||
for (unsigned i = 0, e = Index.size(); i != e; ++i) {
|
for (unsigned i = 0, e = Index.size(); i != e; ++i) {
|
||||||
const RecordIndexElement &R = Index[i];
|
const RecordIndexElement &R = Index[i];
|
||||||
|
@ -1212,7 +1213,7 @@ void EmitClangDiagDocs(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
Records.getAllDerivedDefinitions("Diagnostic");
|
Records.getAllDerivedDefinitions("Diagnostic");
|
||||||
std::vector<Record*> DiagGroups =
|
std::vector<Record*> DiagGroups =
|
||||||
Records.getAllDerivedDefinitions("DiagGroup");
|
Records.getAllDerivedDefinitions("DiagGroup");
|
||||||
std::sort(DiagGroups.begin(), DiagGroups.end(), diagGroupBeforeByName);
|
llvm::sort(DiagGroups.begin(), DiagGroups.end(), diagGroupBeforeByName);
|
||||||
|
|
||||||
DiagGroupParentMap DGParentMap(Records);
|
DiagGroupParentMap DGParentMap(Records);
|
||||||
|
|
||||||
|
@ -1231,10 +1232,10 @@ void EmitClangDiagDocs(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
DiagsInPedanticSet.end());
|
DiagsInPedanticSet.end());
|
||||||
RecordVec GroupsInPedantic(GroupsInPedanticSet.begin(),
|
RecordVec GroupsInPedantic(GroupsInPedanticSet.begin(),
|
||||||
GroupsInPedanticSet.end());
|
GroupsInPedanticSet.end());
|
||||||
std::sort(DiagsInPedantic.begin(), DiagsInPedantic.end(),
|
llvm::sort(DiagsInPedantic.begin(), DiagsInPedantic.end(),
|
||||||
beforeThanCompare);
|
beforeThanCompare);
|
||||||
std::sort(GroupsInPedantic.begin(), GroupsInPedantic.end(),
|
llvm::sort(GroupsInPedantic.begin(), GroupsInPedantic.end(),
|
||||||
beforeThanCompare);
|
beforeThanCompare);
|
||||||
PedDiags.DiagsInGroup.insert(PedDiags.DiagsInGroup.end(),
|
PedDiags.DiagsInGroup.insert(PedDiags.DiagsInGroup.end(),
|
||||||
DiagsInPedantic.begin(),
|
DiagsInPedantic.begin(),
|
||||||
DiagsInPedantic.end());
|
DiagsInPedantic.end());
|
||||||
|
@ -1283,7 +1284,7 @@ void EmitClangDiagDocs(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
OS << "Also controls ";
|
OS << "Also controls ";
|
||||||
|
|
||||||
bool First = true;
|
bool First = true;
|
||||||
std::sort(GroupInfo.SubGroups.begin(), GroupInfo.SubGroups.end());
|
llvm::sort(GroupInfo.SubGroups.begin(), GroupInfo.SubGroups.end());
|
||||||
for (const auto &Name : GroupInfo.SubGroups) {
|
for (const auto &Name : GroupInfo.SubGroups) {
|
||||||
if (!First) OS << ", ";
|
if (!First) OS << ", ";
|
||||||
OS << "`" << (IsRemarkGroup ? "-R" : "-W") << Name << "`_";
|
OS << "`" << (IsRemarkGroup ? "-R" : "-W") << Name << "`_";
|
||||||
|
|
|
@ -111,7 +111,7 @@ Documentation extractDocumentation(RecordKeeper &Records) {
|
||||||
|
|
||||||
auto DocumentationForOption = [&](Record *R) -> DocumentedOption {
|
auto DocumentationForOption = [&](Record *R) -> DocumentedOption {
|
||||||
auto &A = Aliases[R];
|
auto &A = Aliases[R];
|
||||||
std::sort(A.begin(), A.end(), CompareByName);
|
llvm::sort(A.begin(), A.end(), CompareByName);
|
||||||
return {R, std::move(A)};
|
return {R, std::move(A)};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ Documentation extractDocumentation(RecordKeeper &Records) {
|
||||||
Documentation D;
|
Documentation D;
|
||||||
|
|
||||||
auto &Groups = GroupsInGroup[R];
|
auto &Groups = GroupsInGroup[R];
|
||||||
std::sort(Groups.begin(), Groups.end(), CompareByLocation);
|
llvm::sort(Groups.begin(), Groups.end(), CompareByLocation);
|
||||||
for (Record *G : Groups) {
|
for (Record *G : Groups) {
|
||||||
D.Groups.emplace_back();
|
D.Groups.emplace_back();
|
||||||
D.Groups.back().Group = G;
|
D.Groups.back().Group = G;
|
||||||
|
@ -129,7 +129,7 @@ Documentation extractDocumentation(RecordKeeper &Records) {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &Options = OptionsInGroup[R];
|
auto &Options = OptionsInGroup[R];
|
||||||
std::sort(Options.begin(), Options.end(), CompareByName);
|
llvm::sort(Options.begin(), Options.end(), CompareByName);
|
||||||
for (Record *O : Options)
|
for (Record *O : Options)
|
||||||
D.Options.push_back(DocumentationForOption(O));
|
D.Options.push_back(DocumentationForOption(O));
|
||||||
|
|
||||||
|
|
|
@ -2007,7 +2007,7 @@ void NeonEmitter::createIntrinsic(Record *R,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(NewTypeSpecs.begin(), NewTypeSpecs.end());
|
llvm::sort(NewTypeSpecs.begin(), NewTypeSpecs.end());
|
||||||
NewTypeSpecs.erase(std::unique(NewTypeSpecs.begin(), NewTypeSpecs.end()),
|
NewTypeSpecs.erase(std::unique(NewTypeSpecs.begin(), NewTypeSpecs.end()),
|
||||||
NewTypeSpecs.end());
|
NewTypeSpecs.end());
|
||||||
auto &Entry = IntrinsicMap[Name];
|
auto &Entry = IntrinsicMap[Name];
|
||||||
|
|
Loading…
Reference in New Issue