From: Reid Kleckner Date: Fri, 15 Aug 2014 18:03:58 +0000 (+0000) Subject: Fix the build with MSVC 2013 after new shuffle code X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2726e7d60b8ffebe31b70ee1aa2cd23eb17c73cf;p=oota-llvm.git Fix the build with MSVC 2013 after new shuffle code MSVC gives this awesome diagnostic: ..\lib\Target\X86\X86ISelLowering.cpp(7085) : error C2971: 'llvm::VariadicFunction1' : template parameter 'Func' : 'isShuffleEquivalentImpl' : a local variable cannot be used as a non-type argument ..\include\llvm/ADT/VariadicFunction.h(153) : see declaration of 'llvm::VariadicFunction1' ..\lib\Target\X86\X86ISelLowering.cpp(7061) : see declaration of 'isShuffleEquivalentImpl' Using an anonymous namespace makes the problem go away. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215744 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index b31aa446998..5dd85f4e28f 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -7055,11 +7055,14 @@ static bool isSingleInputShuffleMask(ArrayRef Mask) { return true; } +// Hide this symbol with an anonymous namespace instead of 'static' so that MSVC +// 2013 will allow us to use it as a non-type template parameter. +namespace { + /// \brief Implementation of the \c isShuffleEquivalent variadic functor. /// /// See its documentation for details. -static bool isShuffleEquivalentImpl(ArrayRef Mask, - ArrayRef Args) { +bool isShuffleEquivalentImpl(ArrayRef Mask, ArrayRef Args) { if (Mask.size() != Args.size()) return false; for (int i = 0, e = Mask.size(); i < e; ++i) { @@ -7071,6 +7074,9 @@ static bool isShuffleEquivalentImpl(ArrayRef Mask, } return true; } + +} // namespace + /// \brief Checks whether a shuffle mask is equivalent to an explicit list of /// arguments. ///