aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/CGDeclCXX.cpp19
-rw-r--r--lib/CodeGen/CodeGenModule.h14
2 files changed, 15 insertions, 18 deletions
diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp
index c2e2dd0ee4..9695173513 100644
--- a/lib/CodeGen/CGDeclCXX.cpp
+++ b/lib/CodeGen/CGDeclCXX.cpp
@@ -180,22 +180,6 @@ CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D) {
CXXGlobalInits.push_back(Fn);
}
-typedef std::pair<CodeGen::OrderGlobalInitsType,
- llvm::Function *> global_init_pair;
-static int PrioritizedCXXGlobalInitsCmp(const void* a, const void* b) {
- const global_init_pair *LHS = static_cast<const global_init_pair*>(a);
- const global_init_pair *RHS = static_cast<const global_init_pair*>(b);
- if (LHS->first.priority < RHS->first.priority)
- return -1;
- if (LHS->first.priority == RHS->first.priority) {
- if (LHS->first.lex_order < RHS->first.lex_order)
- return -1;
- if (LHS->first.lex_order == RHS->first.lex_order)
- return 0;
- }
- return +1;
-}
-
void
CodeGenModule::EmitCXXGlobalInitFunc() {
if (CXXGlobalInits.empty() && PrioritizedCXXGlobalInits.empty())
@@ -212,8 +196,7 @@ CodeGenModule::EmitCXXGlobalInitFunc() {
if (!PrioritizedCXXGlobalInits.empty()) {
llvm::SmallVector<llvm::Constant*, 8> LocalCXXGlobalInits;
llvm::array_pod_sort(PrioritizedCXXGlobalInits.begin(),
- PrioritizedCXXGlobalInits.end(),
- PrioritizedCXXGlobalInitsCmp);
+ PrioritizedCXXGlobalInits.end());
for (unsigned i = 0; i < PrioritizedCXXGlobalInits.size(); i++) {
llvm::Function *Fn = PrioritizedCXXGlobalInits[i].second;
LocalCXXGlobalInits.push_back(Fn);
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index 713a5fdd64..fbb5d35022 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -80,6 +80,20 @@ namespace CodeGen {
unsigned int lex_order;
OrderGlobalInits(unsigned int p, unsigned int l)
: priority(p), lex_order(l) {}
+ friend bool operator==(const OrderGlobalInits &LHS,
+ const OrderGlobalInits &RHS) {
+ return LHS.priority == RHS.priority &&
+ LHS.lex_order == RHS.lex_order;
+ }
+
+ friend bool operator<(const OrderGlobalInits &LHS,
+ const OrderGlobalInits &RHS) {
+ if (LHS.priority < RHS.priority)
+ return true;
+
+ return LHS.priority == RHS.priority &&
+ LHS.lex_order < RHS.lex_order;
+ }
} OrderGlobalInitsType;
/// CodeGenModule - This class organizes the cross-function state that is used