diff options
author | 2016-08-29 09:53:48 -0700 | |
---|---|---|
committer | 2016-08-29 12:54:23 -0700 | |
commit | aaadff8c182bc95f42eba7375737fb56da572863 (patch) | |
tree | 7fcbf58a92978817678f815e8fef2c429a875559 | |
parent | 3079bc2b73666320a5d2d3454f5c418ef0d37519 (diff) |
ART: Use libbase
Move to using standard macros from libbase. Required so that we
can use libbase in libart-disassembler to disconnect from libart.
Bug: 15436106
Test: m
Test: m ART_BUILD_HOST_STATIC=true
Test: m test-art-host
Change-Id: I1f1723d875d20689d73835f6ab78c27a8efcf27a
-rw-r--r-- | runtime/Android.bp | 4 | ||||
-rw-r--r-- | runtime/base/macros.h | 139 |
2 files changed, 5 insertions, 138 deletions
diff --git a/runtime/Android.bp b/runtime/Android.bp index c92df4e298..9b74b0d316 100644 --- a/runtime/Android.bp +++ b/runtime/Android.bp @@ -379,6 +379,8 @@ cc_defaults { "liblz4", // For liblog, atrace, properties, ashmem, set_sched_policy and socket_peer_is_trusted. "libcutils", + // For common macros. + "libbase", ], static: { static_libs: ["libsigchain_dummy"], @@ -387,6 +389,8 @@ cc_defaults { shared_libs: ["libsigchain"], }, export_include_dirs: ["."], + // ART's macros.h depends on libbase's macros.h. + export_shared_lib_headers: ["libbase"], } gensrcs { diff --git a/runtime/base/macros.h b/runtime/base/macros.h index 0ec6e6de97..292be2022a 100644 --- a/runtime/base/macros.h +++ b/runtime/base/macros.h @@ -20,15 +20,7 @@ #include <stddef.h> // for size_t #include <unistd.h> // for TEMP_FAILURE_RETRY -// bionic and glibc both have TEMP_FAILURE_RETRY, but eg Mac OS' libc doesn't. -#ifndef TEMP_FAILURE_RETRY -#define TEMP_FAILURE_RETRY(exp) ({ \ - decltype(exp) _rc; \ - do { \ - _rc = (exp); \ - } while (_rc == -1 && errno == EINTR); \ - _rc; }) -#endif +#include "android-base/macros.h" #define OVERRIDE override #define FINAL final @@ -42,23 +34,6 @@ friend class test_set_name##_##individual_test##_Test #define ART_FRIEND_TYPED_TEST(test_set_name, individual_test)\ template<typename T> ART_FRIEND_TEST(test_set_name, individual_test) -// DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions. It goes in the private: -// declarations in a class. -#if !defined(DISALLOW_COPY_AND_ASSIGN) -#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&) = delete; \ - void operator=(const TypeName&) = delete -#endif - -// A macro to disallow all the implicit constructors, namely the default constructor, copy -// constructor and operator= functions. -// -// This should be used in the private: declarations for a class that wants to prevent anyone from -// instantiating it. This is especially useful for classes containing only static methods. -#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ - TypeName() = delete; \ - DISALLOW_COPY_AND_ASSIGN(TypeName) - // A macro to disallow new and delete operators for a class. It goes in the private: declarations. // NOTE: Providing placement new (and matching delete) for constructing container elements. #define DISALLOW_ALLOCATION() \ @@ -69,64 +44,6 @@ template<typename T> ART_FRIEND_TEST(test_set_name, individual_test) private: \ void* operator new(size_t) = delete // NOLINT -// The arraysize(arr) macro returns the # of elements in an array arr. -// The expression is a compile-time constant, and therefore can be -// used in defining new arrays, for example. If you use arraysize on -// a pointer by mistake, you will get a compile-time error. -// -// One caveat is that arraysize() doesn't accept any array of an -// anonymous type or a type defined inside a function. In these rare -// cases, you have to use the unsafe ARRAYSIZE_UNSAFE() macro below. This is -// due to a limitation in C++'s template system. The limitation might -// eventually be removed, but it hasn't happened yet. - -// This template function declaration is used in defining arraysize. -// Note that the function doesn't need an implementation, as we only -// use its type. -template <typename T, size_t N> -char (&ArraySizeHelper(T (&array)[N]))[N]; - -#define arraysize(array) (sizeof(ArraySizeHelper(array))) - -// ARRAYSIZE_UNSAFE performs essentially the same calculation as arraysize, -// but can be used on anonymous types or types defined inside -// functions. It's less safe than arraysize as it accepts some -// (although not all) pointers. Therefore, you should use arraysize -// whenever possible. -// -// The expression ARRAYSIZE_UNSAFE(a) is a compile-time constant of type -// size_t. -// -// ARRAYSIZE_UNSAFE catches a few type errors. If you see a compiler error -// -// "warning: division by zero in ..." -// -// when using ARRAYSIZE_UNSAFE, you are (wrongfully) giving it a pointer. -// You should only use ARRAYSIZE_UNSAFE on statically allocated arrays. -// -// The following comments are on the implementation details, and can -// be ignored by the users. -// -// ARRAYSIZE_UNSAFE(arr) works by inspecting sizeof(arr) (the # of bytes in -// the array) and sizeof(*(arr)) (the # of bytes in one array -// element). If the former is divisible by the latter, perhaps arr is -// indeed an array, in which case the division result is the # of -// elements in the array. Otherwise, arr cannot possibly be an array, -// and we generate a compiler error to prevent the code from -// compiling. -// -// Since the size of bool is implementation-defined, we need to cast -// !(sizeof(a) & sizeof(*(a))) to size_t in order to ensure the final -// result has type size_t. -// -// This macro is not perfect as it wrongfully accepts certain -// pointers, namely where the pointer size is divisible by the pointee -// size. Since all our code has to go through a 32-bit compiler, -// where a pointer is 4 bytes, this means all pointers to a type whose -// size is 3 or greater than 4 will be (righteously) rejected. -#define ARRAYSIZE_UNSAFE(a) \ - ((sizeof(a) / sizeof(*(a))) / static_cast<size_t>(!(sizeof(a) % sizeof(*(a))))) - #define SIZEOF_MEMBER(t, f) sizeof((reinterpret_cast<t*>(4096))->f) // NOLINT #define OFFSETOF_MEMBER(t, f) \ @@ -137,9 +54,6 @@ char (&ArraySizeHelper(T (&array)[N]))[N]; #define PACKED(x) __attribute__ ((__aligned__(x), __packed__)) -#define LIKELY(x) __builtin_expect((x), true) -#define UNLIKELY(x) __builtin_expect((x), false) - // Stringify the argument. #define QUOTE(x) #x #define STRINGIFY(x) QUOTE(x) @@ -165,17 +79,6 @@ char (&ArraySizeHelper(T (&array)[N]))[N]; #endif #define PURE __attribute__ ((__pure__)) -#define WARN_UNUSED __attribute__((warn_unused_result)) - -// A deprecated function to call to create a false use of the parameter, for example: -// int foo(int x) { UNUSED(x); return 10; } -// to avoid compiler warnings. Going forward we prefer ATTRIBUTE_UNUSED. -template<typename... T> void UNUSED(const T&...) {} - -// An attribute to place on a parameter to a function, for example: -// int foo(int x ATTRIBUTE_UNUSED) { return 10; } -// to avoid compiler warnings. -#define ATTRIBUTE_UNUSED __attribute__((__unused__)) // Define that a position within code is unreachable, for example: // int foo () { LOG(FATAL) << "Don't call me"; UNREACHABLE(); } @@ -185,46 +88,6 @@ template<typename... T> void UNUSED(const T&...) {} // Add the C++11 noreturn attribute. #define NO_RETURN [[ noreturn ]] // NOLINT[whitespace/braces] [5] -// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through -// between switch labels: -// switch (x) { -// case 40: -// case 41: -// if (truth_is_out_there) { -// ++x; -// FALLTHROUGH_INTENDED; // Use instead of/along with annotations in -// // comments. -// } else { -// return x; -// } -// case 42: -// ... -// -// As shown in the example above, the FALLTHROUGH_INTENDED macro should be -// followed by a semicolon. It is designed to mimic control-flow statements -// like 'break;', so it can be placed in most places where 'break;' can, but -// only if there are no statements on the execution path between it and the -// next switch label. -// -// When compiled with clang in C++11 mode, the FALLTHROUGH_INTENDED macro is -// expanded to [[clang::fallthrough]] attribute, which is analysed when -// performing switch labels fall-through diagnostic ('-Wimplicit-fallthrough'). -// See clang documentation on language extensions for details: -// http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough -// -// When used with unsupported compilers, the FALLTHROUGH_INTENDED macro has no -// effect on diagnostics. -// -// In either case this macro has no effect on runtime behavior and performance -// of code. -#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") -#define FALLTHROUGH_INTENDED [[clang::fallthrough]] // NOLINT -#endif - -#ifndef FALLTHROUGH_INTENDED -#define FALLTHROUGH_INTENDED do { } while (0) -#endif - // Annotalysis thread-safety analysis support. #define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__))) |