[llvm-commits] [llvm] r131624 - /llvm/trunk/include/llvm/Support/StandardPasses.h

Francois Pichet pichet2000 at gmail.com
Wed May 18 19:54:12 PDT 2011


Author: fpichet
Date: Wed May 18 21:54:11 2011
New Revision: 131624

URL: http://llvm.org/viewvc/llvm-project?rev=131624&view=rev
Log:
Fix the MSVC build.
Use a set of overloaded functions instead of template function for CreatePassFn.

It seems that template deduction for functions type that differs only by return type doesn't work with MSVC. 

Modified:
    llvm/trunk/include/llvm/Support/StandardPasses.h

Modified: llvm/trunk/include/llvm/Support/StandardPasses.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/StandardPasses.h?rev=131624&r1=131623&r2=131624&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/StandardPasses.h (original)
+++ llvm/trunk/include/llvm/Support/StandardPasses.h Wed May 18 21:54:11 2011
@@ -43,16 +43,21 @@
       StandardPass::CreateVerifierPass = CreateVerifierPass;
     }
     private:
-    /// Define a template function that does the casting for us, so that we can
-    /// perform safe function pointer casts, but catch unsafe ones.
-    template<llvm::ImmutablePass*(*X)(void)> static llvm::Pass*
-      CreatePassFn(void) { return X(); }
-    template<llvm::ModulePass*(*X)(void)> static llvm::Pass*
-      CreatePassFn(void) { return X(); }
-    template<llvm::FunctionPass*(*X)(void)> static llvm::Pass*
-      CreatePassFn(void) { return X(); }
-    template<llvm::Pass*(*X)(void)> static llvm::Pass*
-      CreatePassFn(void) { return X(); }
+    /// Define a set of function overloads that does the casting for us, so
+    /// that we can perform safe function pointer casts, but catch unsafe ones.
+    PassInfo::NormalCtor_t static CreatePassFn(llvm::ImmutablePass*(*X)(void)) {
+     return reinterpret_cast<PassInfo::NormalCtor_t>(X);
+    }
+    PassInfo::NormalCtor_t static CreatePassFn(llvm::ModulePass*(*X)(void)) {
+      return reinterpret_cast<PassInfo::NormalCtor_t>(X);
+    }
+    PassInfo::NormalCtor_t static CreatePassFn(llvm::FunctionPass*(*X)(void)) {
+      return reinterpret_cast<PassInfo::NormalCtor_t>(X);
+    }
+    PassInfo::NormalCtor_t static CreatePassFn(llvm::Pass*(*X)(void)) {
+      return reinterpret_cast<PassInfo::NormalCtor_t>(X);
+    }
+
     static llvm::Pass *CreateVerifierPass() { return createVerifierPass(); }
     /// Passes must be registered with functions that take no arguments, so we have
     /// to wrap their existing constructors.  
@@ -82,7 +87,7 @@
       // support "obvious" type-punning idioms.
 #define DEFAULT_ALIAS_ANALYSIS_PASS(pass, flags)\
   StandardPass::RegisterDefaultPass(\
-    CreatePassFn<create ## pass ## Pass>,\
+    CreatePassFn(create ## pass ## Pass),\
     &DefaultStandardPasses::pass ## ID, (unsigned char*)0, StandardPass::AliasAnalysis, flags)
       DEFAULT_ALIAS_ANALYSIS_PASS(TypeBasedAliasAnalysis, 0);
       DEFAULT_ALIAS_ANALYSIS_PASS(BasicAliasAnalysis, 0);
@@ -90,7 +95,7 @@
 
 #define DEFAULT_FUNCTION_PASS(pass, flags)\
   StandardPass::RegisterDefaultPass(\
-      CreatePassFn<create ## pass ## Pass>,\
+      CreatePassFn(create ## pass ## Pass),\
       &DefaultStandardPasses::pass ## ID, 0, StandardPass::Function, flags)
       DEFAULT_FUNCTION_PASS(CFGSimplification,
           StandardPass::OptimzationFlags(1));
@@ -101,7 +106,7 @@
 
 #define DEFAULT_MODULE_PASS(pass, flags)\
   StandardPass::RegisterDefaultPass(\
-      CreatePassFn<create ## pass ## Pass>,\
+      CreatePassFn(create ## pass ## Pass),\
       &DefaultStandardPasses::pass ## ID, 0, StandardPass::Module, flags)
       // Optimize out global vars
       DEFAULT_MODULE_PASS(GlobalOptimizer,
@@ -228,7 +233,7 @@
 
 #define DEFAULT_LTO_PASS(pass, flags)\
   StandardPass::RegisterDefaultPass(\
-      CreatePassFn<create ## pass ## Pass>,\
+      CreatePassFn(create ## pass ## Pass),\
       &DefaultStandardPasses::pass ## ID, 0, StandardPass::LTO, flags)
 
       // LTO passes





More information about the llvm-commits mailing list