Re-commit r208025, reverted in r208030, with a fix for a conformance issue
which GCC detects and Clang does not!
llvm-svn: 208033
diff --git a/llvm/lib/Transforms/Utils/CtorUtils.cpp b/llvm/lib/Transforms/Utils/CtorUtils.cpp
index 0082df0..7cf793f 100644
--- a/llvm/lib/Transforms/Utils/CtorUtils.cpp
+++ b/llvm/lib/Transforms/Utils/CtorUtils.cpp
@@ -132,8 +132,8 @@
/// Call "ShouldRemove" for every entry in M's global_ctor list and remove the
/// entries for which it returns true. Return true if anything changed.
-bool optimizeGlobalCtorsList(Module &M, ShouldRemoveCtor ShouldRemove,
- void *Context) {
+bool optimizeGlobalCtorsList(Module &M,
+ function_ref<bool(Function *)> ShouldRemove) {
GlobalVariable *GlobalCtors = findGlobalCtors(M);
if (!GlobalCtors)
return false;
@@ -163,7 +163,7 @@
continue;
// If we can evaluate the ctor at compile time, do.
- if (ShouldRemove(Context, F)) {
+ if (ShouldRemove(F)) {
Ctors.erase(Ctors.begin() + i);
MadeChange = true;
--i;