[lld] r233901 - ELF: Always use variadic templates in CreateELF.h.

Rui Ueyama ruiu at google.com
Thu Apr 2 00:28:19 PDT 2015


Author: ruiu
Date: Thu Apr  2 02:28:19 2015
New Revision: 233901

URL: http://llvm.org/viewvc/llvm-project?rev=233901&view=rev
Log:
ELF: Always use variadic templates in CreateELF.h.

Since we no longer support MSVC 2012, we can assume that variadic
templates are always supported. This patch removes an #ifdef for
C++ compilers that don't support variadic templates.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/CreateELF.h

Modified: lld/trunk/lib/ReaderWriter/ELF/CreateELF.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/CreateELF.h?rev=233901&r1=233900&r2=233901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/CreateELF.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/CreateELF.h Thu Apr  2 02:28:19 2015
@@ -12,6 +12,7 @@
 /// ELFType depending on the runtime type needed.
 ///
 //===----------------------------------------------------------------------===//
+
 #ifndef LLD_READER_WRITER_ELF_CREATE_ELF_H
 #define LLD_READER_WRITER_ELF_CREATE_ELF_H
 
@@ -39,7 +40,7 @@ using llvm::object::ELFType;
       __VA_ARGS__);
 
 #if !LLVM_IS_UNALIGNED_ACCESS_FAST
-# define LLVM_CREATE_ELF_MaxAlignCheck(normal, low, endian, is64, ...) \
+# define LLVM_CREATE_ELF_Create(normal, low, endian, is64, ...) \
   if (maxAlignment >= normal) \
     return LLVM_CREATE_ELF_CreateELFTraits(endian, normal, is64, __VA_ARGS__) \
   else if (maxAlignment >= low) \
@@ -47,72 +48,35 @@ using llvm::object::ELFType;
   else \
     llvm_unreachable("Invalid alignment for ELF file!");
 #else
-# define LLVM_CREATE_ELF_MaxAlignCheck(normal, low, endian, is64, ...) \
+# define LLVM_CREATE_ELF_Create(normal, low, endian, is64, ...) \
   if (maxAlignment >= low) \
     return LLVM_CREATE_ELF_CreateELFTraits(endian, low, is64, __VA_ARGS__) \
   else \
     llvm_unreachable("Invalid alignment for ELF file!");
 #endif
 
-#define LLVM_CREATE_ELF_IMPL(...) \
-    if (ident.first == llvm::ELF::ELFCLASS32 && \
-        ident.second == llvm::ELF::ELFDATA2LSB) { \
-      LLVM_CREATE_ELF_MaxAlignCheck(4, 2, little, false, __VA_ARGS__) \
-    } else if (ident.first == llvm::ELF::ELFCLASS32 && \
-               ident.second == llvm::ELF::ELFDATA2MSB) { \
-      LLVM_CREATE_ELF_MaxAlignCheck(4, 2, big, false, __VA_ARGS__) \
-    } else if (ident.first == llvm::ELF::ELFCLASS64 && \
-               ident.second == llvm::ELF::ELFDATA2MSB) { \
-      LLVM_CREATE_ELF_MaxAlignCheck(8, 2, big, true, __VA_ARGS__) \
-    } else if (ident.first == llvm::ELF::ELFCLASS64 && \
-               ident.second == llvm::ELF::ELFDATA2LSB) { \
-      LLVM_CREATE_ELF_MaxAlignCheck(8, 2, little, true, __VA_ARGS__) \
-    } \
-    llvm_unreachable("Invalid ELF type!");
-
-#if LLVM_HAS_VARIADIC_TEMPLATES
 template <class Traits, class ...Args>
 typename Traits::result_type createELF(
     std::pair<unsigned char, unsigned char> ident, std::size_t maxAlignment,
     Args &&...args) {
-  LLVM_CREATE_ELF_IMPL(std::forward<Args>(args)...)
-}
-#else
-template <class Traits, class T1>
-typename Traits::result_type createELF(
-    std::pair<unsigned char, unsigned char> ident, std::size_t maxAlignment,
-    T1 &&t1) {
-  LLVM_CREATE_ELF_IMPL(std::forward<T1>(t1))
-}
-
-template <class Traits, class T1, class T2>
-typename Traits::result_type createELF(
-    std::pair<unsigned char, unsigned char> ident, std::size_t maxAlignment,
-    T1 &&t1, T2 &&t2) {
-  LLVM_CREATE_ELF_IMPL(std::forward<T1>(t1), std::forward<T2>(t2))
+  if (ident.first == llvm::ELF::ELFCLASS32 &&
+      ident.second == llvm::ELF::ELFDATA2LSB) {
+    LLVM_CREATE_ELF_Create(4, 2, little, false, std::forward<Args>(args)...)
+  } else if (ident.first == llvm::ELF::ELFCLASS32 &&
+             ident.second == llvm::ELF::ELFDATA2MSB) {
+    LLVM_CREATE_ELF_Create(4, 2, big, false, std::forward<Args>(args)...)
+  } else if (ident.first == llvm::ELF::ELFCLASS64 &&
+             ident.second == llvm::ELF::ELFDATA2MSB) {
+    LLVM_CREATE_ELF_Create(8, 2, big, true, std::forward<Args>(args)...)
+  } else if (ident.first == llvm::ELF::ELFCLASS64 &&
+             ident.second == llvm::ELF::ELFDATA2LSB) {
+    LLVM_CREATE_ELF_Create(8, 2, little, true, std::forward<Args>(args)...)
+  }
+  llvm_unreachable("Invalid ELF type!");
 }
-
-template <class Traits, class T1, class T2, class T3>
-typename Traits::result_type createELF(
-    std::pair<unsigned char, unsigned char> ident, std::size_t maxAlignment,
-    T1 &&t1, T2 &&t2, T3 &&t3) {
-  LLVM_CREATE_ELF_IMPL(std::forward<T1>(t1), std::forward<T2>(t2),
-                       std::forward<T3>(t3))
-}
-
-template <class Traits, class T1, class T2, class T3, class T4>
-typename Traits::result_type createELF(
-    std::pair<unsigned char, unsigned char> ident, std::size_t maxAlignment,
-    T1 &&t1, T2 &&t2, T3 &&t3, T4 &&t4) {
-  LLVM_CREATE_ELF_IMPL(std::forward<T1>(t1), std::forward<T2>(t2),
-                       std::forward<T3>(t3), std::forward<T4>(t4))
-}
-
-#endif // LLVM_HAS_VARIADIC_TEMPLATES
 } // end anon namespace
 
 #undef LLVM_CREATE_ELF_CreateELFTraits
-#undef LLVM_CREATE_ELF_MaxAlignCheck
-#undef LLVM_CREATE_ELF_IMPL
+#undef LLVM_CREATE_ELF_Create
 
 #endif





More information about the llvm-commits mailing list