[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