]> granicus.if.org Git - llvm/commitdiff
[NFC] Remove obsolete LLVM_GNUC_PREREQ
authorJF Bastien <jfbastien@apple.com>
Thu, 1 Aug 2019 03:30:45 +0000 (03:30 +0000)
committerJF Bastien <jfbastien@apple.com>
Thu, 1 Aug 2019 03:30:45 +0000 (03:30 +0000)
The current minimum GCC version is 4.8 (soon to be 5.1), we there don't need to check for older versions. While I'm around Compiler.h, also update some of the doxygen comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367508 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Compiler.h
include/llvm/Support/MathExtras.h
include/llvm/Support/SwapByteOrder.h
include/llvm/Support/type_traits.h

index 356ff6f04861e4f8a06b5c9d95fa86f409f5cda1..89a3a4ce194587ed95e59910dc21332e37d487cb 100644 (file)
@@ -75,6 +75,7 @@
 #define LLVM_MSC_PREREQ(version) 0
 #endif
 
+/// \macro LLVM_HAS_RVALUE_REFERENCE_THIS
 /// Does the compiler support ref-qualifiers for *this?
 ///
 /// Sadly, this is separate from just rvalue reference support because GCC
@@ -85,6 +86,7 @@
 #define LLVM_HAS_RVALUE_REFERENCE_THIS 0
 #endif
 
+/// \macro LLVM_LVALUE_FUNCTION
 /// Expands to '&' if ref-qualifiers for *this are supported.
 ///
 /// This can be used to provide lvalue/rvalue overrides of member functions.
 #define LLVM_LVALUE_FUNCTION
 #endif
 
-/// LLVM_LIBRARY_VISIBILITY - If a class marked with this attribute is linked
-/// into a shared library, then the class should be private to the library and
-/// not accessible from outside it.  Can also be used to mark variables and
-/// functions, making them private to any shared library they are linked into.
-/// On PE/COFF targets, library visibility is the default, so this isn't needed.
-#if (__has_attribute(visibility) || LLVM_GNUC_PREREQ(4, 0, 0)) &&              \
+/// \macro LLVM_LIBRARY_VISIBILITY
+/// If a class marked with this attribute is linked into a shared library, then
+/// the class should be private to the library and not accessible from outside
+/// it. Can also be used to mark variables and functions, making them private to
+/// any shared library they are linked into. On PE/COFF targets, library
+/// visibility is the default, so this isn't needed.
+#if __has_attribute(visibility) &&                                      \
     !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(_WIN32)
 #define LLVM_LIBRARY_VISIBILITY __attribute__ ((visibility("hidden")))
 #else
 #define LLVM_LIBRARY_VISIBILITY
 #endif
 
+/// \macro LLVM_PREFETCH
 #if defined(__GNUC__)
 #define LLVM_PREFETCH(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
 #else
 #define LLVM_PREFETCH(addr, rw, locality)
 #endif
 
-#if __has_attribute(used) || LLVM_GNUC_PREREQ(3, 1, 0)
+/// \macro LLVM_ATTRIBUTE_USED
+#if __has_attribute(used)
 #define LLVM_ATTRIBUTE_USED __attribute__((__used__))
 #else
 #define LLVM_ATTRIBUTE_USED
 #endif
 
-/// LLVM_NODISCARD - Warn if a type or return value is discarded.
+/// \macro LLVM_NODISCARD
+/// Warn if a type or return value is discarded.
 #if __cplusplus > 201402L && __has_cpp_attribute(nodiscard)
 #define LLVM_NODISCARD [[nodiscard]]
 #elif !__cplusplus
 #define LLVM_NODISCARD
 #endif
 
-// Indicate that a non-static, non-const C++ member function reinitializes
-// the entire object to a known state, independent of the previous state of
-// the object.
-//
-// The clang-tidy check bugprone-use-after-move recognizes this attribute as a
-// marker that a moved-from object has left the indeterminate state and can be
-// reused.
+/// \macro LLVM_ATTRIBUTE_REINITIALIZES
+///
+/// Indicate that a non-static, non-const C++ member function reinitializes the
+/// entire object to a known state, independent of the previous state of the
+/// object.
+///
+/// The clang-tidy check bugprone-use-after-move recognizes this attribute as a
+/// marker that a moved-from object has left the indeterminate state and can be
+/// reused.
 #if __has_cpp_attribute(clang::reinitializes)
 #define LLVM_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]]
 #else
 #define LLVM_ATTRIBUTE_REINITIALIZES
 #endif
 
-// Some compilers warn about unused functions. When a function is sometimes
-// used or not depending on build settings (e.g. a function only called from
-// within "assert"), this attribute can be used to suppress such warnings.
-//
-// However, it shouldn't be used for unused *variables*, as those have a much
-// more portable solution:
-//   (void)unused_var_name;
-// Prefer cast-to-void wherever it is sufficient.
-#if __has_attribute(unused) || LLVM_GNUC_PREREQ(3, 1, 0)
+/// \macro LLVM_ATTRIBUTE_UNUSED
+///
+/// Some compilers warn about unused functions. When a function is sometimes
+/// used or not depending on build settings (e.g. a function only called from
+/// within "assert"), this attribute can be used to suppress such warnings.
+///
+/// However, it shouldn't be used for unused *variables*, as those have a much
+/// more portable solution:
+///   (void)unused_var_name;
+/// Prefer cast-to-void wherever it is sufficient.
+#if __has_attribute(unused)
 #define LLVM_ATTRIBUTE_UNUSED __attribute__((__unused__))
 #else
 #define LLVM_ATTRIBUTE_UNUSED
 #endif
 
+/// \macro LLVM_ATTRIBUTE_WEAK
 // FIXME: Provide this for PE/COFF targets.
-#if (__has_attribute(weak) || LLVM_GNUC_PREREQ(4, 0, 0)) &&                    \
+#if __has_attribute(weak) &&                                            \
     (!defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(_WIN32))
 #define LLVM_ATTRIBUTE_WEAK __attribute__((__weak__))
 #else
 #define LLVM_ATTRIBUTE_WEAK
 #endif
 
-// Prior to clang 3.2, clang did not accept any spelling of
-// __has_attribute(const), so assume it is supported.
+/// \macro LLVM_READNONE
 #if defined(__clang__) || defined(__GNUC__)
 // aka 'CONST' but following LLVM Conventions.
 #define LLVM_READNONE __attribute__((__const__))
 #define LLVM_READNONE
 #endif
 
+/// \macro LLVM_READONLY
 #if __has_attribute(pure) || defined(__GNUC__)
 // aka 'PURE' but following LLVM Conventions.
 #define LLVM_READONLY __attribute__((__pure__))
 #define LLVM_READONLY
 #endif
 
-#if __has_builtin(__builtin_expect) || LLVM_GNUC_PREREQ(4, 0, 0)
+/// \macro LLVM_LIKELY
+/// \macro LLVM_UNLIKELY
+#if __has_builtin(__builtin_expect)
 #define LLVM_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true)
 #define LLVM_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false)
 #else
 #define LLVM_UNLIKELY(EXPR) (EXPR)
 #endif
 
-/// LLVM_ATTRIBUTE_NOINLINE - On compilers where we have a directive to do so,
-/// mark a method "not for inlining".
-#if __has_attribute(noinline) || LLVM_GNUC_PREREQ(3, 4, 0)
+/// \macro LLVM_ATTRIBUTE_NOINLINE
+/// On compilers where we have a directive to do so, mark a method "not for
+/// inlining".
+#if __has_attribute(noinline)
 #define LLVM_ATTRIBUTE_NOINLINE __attribute__((noinline))
 #elif defined(_MSC_VER)
 #define LLVM_ATTRIBUTE_NOINLINE __declspec(noinline)
 #define LLVM_ATTRIBUTE_NOINLINE
 #endif
 
-/// LLVM_ATTRIBUTE_ALWAYS_INLINE - On compilers where we have a directive to do
-/// so, mark a method "always inline" because it is performance sensitive. GCC
-/// 3.4 supported this but is buggy in various cases and produces unimplemented
-/// errors, just use it in GCC 4.0 and later.
-#if __has_attribute(always_inline) || LLVM_GNUC_PREREQ(4, 0, 0)
+/// \macro LLVM_ATTRIBUTE_ALWAYS_INLINE
+/// On compilers where we have a directive to do so, mark a method "always
+/// inline" because it is performance sensitive. GCC 3.4 supported this but is
+/// buggy in various cases and produces unimplemented errors, just use it in GCC
+/// 4.0 and later.
+#if __has_attribute(always_inline)
 #define LLVM_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
 #elif defined(_MSC_VER)
 #define LLVM_ATTRIBUTE_ALWAYS_INLINE __forceinline
 #define LLVM_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
+/// \macro LLVM_ATTRIBUTE_NORETURN
 #ifdef __GNUC__
 #define LLVM_ATTRIBUTE_NORETURN __attribute__((noreturn))
 #elif defined(_MSC_VER)
 #define LLVM_ATTRIBUTE_NORETURN
 #endif
 
+/// \macro LLVM_ATTRIBUTE_RETURNS_NONNULL
 #if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0)
 #define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
 #elif defined(_MSC_VER)
 #define LLVM_ATTRIBUTE_RETURNS_NONNULL
 #endif
 
-/// \macro LLVM_ATTRIBUTE_RETURNS_NOALIAS Used to mark a function as returning a
-/// pointer that does not alias any other valid pointer.
+/// \macro LLVM_ATTRIBUTE_RETURNS_NOALIAS
+/// Used to mark a function as returning a pointer that does not alias any other
+/// valid pointer.
 #ifdef __GNUC__
 #define LLVM_ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))
 #elif defined(_MSC_VER)
 #define LLVM_ATTRIBUTE_RETURNS_NOALIAS
 #endif
 
-/// LLVM_FALLTHROUGH - Mark fallthrough cases in switch statements.
+/// \macro LLVM_FALLTHROUGH
+/// Mark fallthrough cases in switch statements.
 #if __cplusplus > 201402L && __has_cpp_attribute(fallthrough)
 #define LLVM_FALLTHROUGH [[fallthrough]]
 #elif __has_cpp_attribute(gnu::fallthrough)
 #define LLVM_FALLTHROUGH
 #endif
 
-/// LLVM_REQUIRE_CONSTANT_INITIALIZATION - Apply this to globals to ensure that
-/// they are constant initialized.
+/// \macro LLVM_REQUIRE_CONSTANT_INITIALIZATION
+/// Apply this to globals to ensure that they are constant initialized.
 #if __has_cpp_attribute(clang::require_constant_initialization)
 #define LLVM_REQUIRE_CONSTANT_INITIALIZATION                                   \
   [[clang::require_constant_initialization]]
 #define LLVM_REQUIRE_CONSTANT_INITIALIZATION
 #endif
 
-/// LLVM_EXTENSION - Support compilers where we have a keyword to suppress
-/// pedantic diagnostics.
+/// \macro LLVM_EXTENSION
+/// Support compilers where we have a keyword to suppress pedantic diagnostics.
 #ifdef __GNUC__
 #define LLVM_EXTENSION __extension__
 #else
   decl
 #endif
 
-/// LLVM_BUILTIN_UNREACHABLE - On compilers which support it, expands
-/// to an expression which states that it is undefined behavior for the
-/// compiler to reach this point.  Otherwise is not defined.
-#if __has_builtin(__builtin_unreachable) || LLVM_GNUC_PREREQ(4, 5, 0)
+/// On compilers which support it, expands to an expression which states that it
+/// is undefined behavior for the compiler to reach this point. Otherwise is not
+/// defined.
+#if __has_builtin(__builtin_unreachable)
 # define LLVM_BUILTIN_UNREACHABLE __builtin_unreachable()
 #elif defined(_MSC_VER)
 # define LLVM_BUILTIN_UNREACHABLE __assume(false)
 #endif
 
-/// LLVM_BUILTIN_TRAP - On compilers which support it, expands to an expression
-/// which causes the program to exit abnormally.
-#if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0)
+/// On compilers which support it, expands to an expression which causes the
+/// program to exit abnormally.
+#if __has_builtin(__builtin_trap)
 # define LLVM_BUILTIN_TRAP __builtin_trap()
 #elif defined(_MSC_VER)
 // The __debugbreak intrinsic is supported by MSVC, does not require forward
 # define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0
 #endif
 
-/// LLVM_BUILTIN_DEBUGTRAP - On compilers which support it, expands to
-/// an expression which causes the program to break while running
-/// under a debugger.
+/// \macro LLVM_BUILTIN_DEBUGTRAP
+/// On compilers which support it, expands to an expression which causes the
+/// program to break while running under a debugger.
 #if __has_builtin(__builtin_debugtrap)
 # define LLVM_BUILTIN_DEBUGTRAP __builtin_debugtrap()
 #elif defined(_MSC_VER)
 
 /// \macro LLVM_ASSUME_ALIGNED
 /// Returns a pointer with an assumed alignment.
-#if __has_builtin(__builtin_assume_aligned) || LLVM_GNUC_PREREQ(4, 7, 0)
+#if __has_builtin(__builtin_assume_aligned)
 # define LLVM_ASSUME_ALIGNED(p, a) __builtin_assume_aligned(p, a)
 #elif defined(LLVM_BUILTIN_UNREACHABLE)
 // As of today, clang does not support __builtin_assume_aligned.
@@ -455,6 +474,7 @@ void AnnotateIgnoreWritesEnd(const char *file, int line);
 #define LLVM_NO_SANITIZE(KIND)
 #endif
 
+/// \macro LLVM_DUMP_METHOD
 /// Mark debug helper function definitions like dump() that should not be
 /// stripped from debug builds.
 /// Note that you should also surround dump() functions with
index a2009c7b8b6a421f115c399abe729140996abae4..495acd70fe21cad3b22ba804c61d61d6f08b6570 100644 (file)
@@ -79,7 +79,7 @@ template <typename T> struct TrailingZerosCounter<T, 4> {
     if (ZB != ZB_Undefined && Val == 0)
       return 32;
 
-#if __has_builtin(__builtin_ctz) || LLVM_GNUC_PREREQ(4, 0, 0)
+#if __has_builtin(__builtin_ctz)
     return __builtin_ctz(Val);
 #elif defined(_MSC_VER)
     unsigned long Index;
@@ -95,7 +95,7 @@ template <typename T> struct TrailingZerosCounter<T, 8> {
     if (ZB != ZB_Undefined && Val == 0)
       return 64;
 
-#if __has_builtin(__builtin_ctzll) || LLVM_GNUC_PREREQ(4, 0, 0)
+#if __has_builtin(__builtin_ctzll)
     return __builtin_ctzll(Val);
 #elif defined(_MSC_VER)
     unsigned long Index;
@@ -148,7 +148,7 @@ template <typename T> struct LeadingZerosCounter<T, 4> {
     if (ZB != ZB_Undefined && Val == 0)
       return 32;
 
-#if __has_builtin(__builtin_clz) || LLVM_GNUC_PREREQ(4, 0, 0)
+#if __has_builtin(__builtin_clz)
     return __builtin_clz(Val);
 #elif defined(_MSC_VER)
     unsigned long Index;
@@ -164,7 +164,7 @@ template <typename T> struct LeadingZerosCounter<T, 8> {
     if (ZB != ZB_Undefined && Val == 0)
       return 64;
 
-#if __has_builtin(__builtin_clzll) || LLVM_GNUC_PREREQ(4, 0, 0)
+#if __has_builtin(__builtin_clzll)
     return __builtin_clzll(Val);
 #elif defined(_MSC_VER)
     unsigned long Index;
index 06a447a27c2ac2ce66ccbc72dd5482c6c1252362..34edc81e99aea474393397996f507de299c5604b 100644 (file)
@@ -42,7 +42,7 @@ inline uint16_t SwapByteOrder_16(uint16_t value) {
 /// SwapByteOrder_32 - This function returns a byte-swapped representation of
 /// the 32-bit argument.
 inline uint32_t SwapByteOrder_32(uint32_t value) {
-#if defined(__llvm__) || (LLVM_GNUC_PREREQ(4, 3, 0) && !defined(__ICC))
+#if defined(__llvm__) || !defined(__ICC)
   return __builtin_bswap32(value);
 #elif defined(_MSC_VER) && !defined(_DEBUG)
   return _byteswap_ulong(value);
@@ -58,7 +58,7 @@ inline uint32_t SwapByteOrder_32(uint32_t value) {
 /// SwapByteOrder_64 - This function returns a byte-swapped representation of
 /// the 64-bit argument.
 inline uint64_t SwapByteOrder_64(uint64_t value) {
-#if defined(__llvm__) || (LLVM_GNUC_PREREQ(4, 3, 0) && !defined(__ICC))
+#if defined(__llvm__) || !defined(__ICC)
   return __builtin_bswap64(value);
 #elif defined(_MSC_VER) && !defined(_DEBUG)
   return _byteswap_uint64(value);
index c8c6a76a90f1d4c221469e57681dba284988138a..82e956938b563c547059bdc7e151801ea6734693 100644 (file)
@@ -199,7 +199,7 @@ class is_trivially_copyable<T*> : public std::true_type {
 // macro will be left undefined.
 #if __cplusplus >= 201402L || defined(_MSC_VER)
 #define LLVM_IS_FINAL(Ty) std::is_final<Ty>()
-#elif __has_feature(is_final) || LLVM_GNUC_PREREQ(4, 7, 0)
+#elif __has_feature(is_final)
 #define LLVM_IS_FINAL(Ty) __is_final(Ty)
 #endif