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 global_init_pair; -static int PrioritizedCXXGlobalInitsCmp(const void* a, const void* b) { - const global_init_pair *LHS = static_cast(a); - const global_init_pair *RHS = static_cast(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 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