Skip to content

Commit 6fdf225

Browse files
committed
Always inline value ctors in optimized gcc mode only
This reverts commit 332da79.
1 parent 332da79 commit 6fdf225

File tree

1 file changed

+50
-55
lines changed

1 file changed

+50
-55
lines changed

include/fmt/base.h

+50-55
Original file line numberDiff line numberDiff line change
@@ -209,20 +209,6 @@
209209
# define FMT_DEPRECATED /* deprecated */
210210
#endif
211211

212-
#ifdef FMT_ALWAYS_INLINE
213-
// Use the provided definition.
214-
#elif FMT_GCC_VERSION || FMT_CLANG_VERSION
215-
# define FMT_ALWAYS_INLINE inline __attribute__((always_inline))
216-
#else
217-
# define FMT_ALWAYS_INLINE inline
218-
#endif
219-
// A version of FMT_ALWAYS_INLINE to prevent code bloat in debug mode.
220-
#ifdef NDEBUG
221-
# define FMT_INLINE FMT_ALWAYS_INLINE
222-
#else
223-
# define FMT_INLINE inline
224-
#endif
225-
226212
#if FMT_GCC_VERSION || FMT_CLANG_VERSION
227213
# define FMT_VISIBILITY(value) __attribute__((visibility(value)))
228214
#else
@@ -249,6 +235,28 @@
249235
# define FMT_MSC_WARNING(...)
250236
#endif
251237

238+
// Enable minimal optimizations for more compact code in debug mode.
239+
FMT_PRAGMA_GCC(push_options)
240+
#if !defined(__OPTIMIZE__) && !defined(__CUDACC__) && !defined(FMT_MODULE)
241+
FMT_PRAGMA_GCC(optimize("Og"))
242+
#define FMT_GCC_OPTIMIZED
243+
#endif
244+
FMT_PRAGMA_CLANG(diagnostic push)
245+
246+
#ifdef FMT_ALWAYS_INLINE
247+
// Use the provided definition.
248+
#elif FMT_GCC_VERSION || FMT_CLANG_VERSION
249+
# define FMT_ALWAYS_INLINE inline __attribute__((always_inline))
250+
#else
251+
# define FMT_ALWAYS_INLINE inline
252+
#endif
253+
// A version of FMT_ALWAYS_INLINE to prevent code bloat in debug mode.
254+
#if defined(NDEBUG) || defined(FMT_GCC_OPTIMIZED)
255+
# define FMT_INLINE FMT_ALWAYS_INLINE
256+
#else
257+
# define FMT_INLINE inline
258+
#endif
259+
252260
#ifndef FMT_BEGIN_NAMESPACE
253261
# define FMT_BEGIN_NAMESPACE \
254262
namespace fmt { \
@@ -297,13 +305,6 @@
297305
using unused = int[]; \
298306
(void)unused { 0, (expr, 0)... }
299307

300-
// Enable minimal optimizations for more compact code in debug mode.
301-
FMT_PRAGMA_GCC(push_options)
302-
#if !defined(__OPTIMIZE__) && !defined(__CUDACC__) && !defined(FMT_MODULE)
303-
FMT_PRAGMA_GCC(optimize("Og"))
304-
#endif
305-
FMT_PRAGMA_CLANG(diagnostic push)
306-
307308
FMT_BEGIN_NAMESPACE
308309

309310
// Implementations of enable_if_t and other metafunctions for older systems.
@@ -2145,54 +2146,48 @@ template <typename Context> class value {
21452146
named_arg_value<char_type> named_args;
21462147
};
21472148

2148-
constexpr FMT_ALWAYS_INLINE value() : no_value() {}
2149-
constexpr FMT_ALWAYS_INLINE value(signed char x) : int_value(x) {}
2150-
constexpr FMT_ALWAYS_INLINE value(unsigned char x FMT_BUILTIN)
2151-
: uint_value(x) {}
2152-
constexpr FMT_ALWAYS_INLINE value(signed short x) : int_value(x) {}
2153-
constexpr FMT_ALWAYS_INLINE value(unsigned short x FMT_BUILTIN)
2154-
: uint_value(x) {}
2155-
constexpr FMT_ALWAYS_INLINE value(int x) : int_value(x) {}
2156-
constexpr FMT_ALWAYS_INLINE value(unsigned x FMT_BUILTIN) : uint_value(x) {}
2157-
FMT_CONSTEXPR FMT_ALWAYS_INLINE value(long x FMT_BUILTIN)
2158-
: value(long_type(x)) {}
2159-
FMT_CONSTEXPR FMT_ALWAYS_INLINE value(unsigned long x FMT_BUILTIN)
2149+
constexpr FMT_INLINE value() : no_value() {}
2150+
constexpr FMT_INLINE value(signed char x) : int_value(x) {}
2151+
constexpr FMT_INLINE value(unsigned char x FMT_BUILTIN) : uint_value(x) {}
2152+
constexpr FMT_INLINE value(signed short x) : int_value(x) {}
2153+
constexpr FMT_INLINE value(unsigned short x FMT_BUILTIN) : uint_value(x) {}
2154+
constexpr FMT_INLINE value(int x) : int_value(x) {}
2155+
constexpr FMT_INLINE value(unsigned x FMT_BUILTIN) : uint_value(x) {}
2156+
FMT_CONSTEXPR FMT_INLINE value(long x FMT_BUILTIN) : value(long_type(x)) {}
2157+
FMT_CONSTEXPR FMT_INLINE value(unsigned long x FMT_BUILTIN)
21602158
: value(ulong_type(x)) {}
2161-
constexpr FMT_ALWAYS_INLINE value(long long x FMT_BUILTIN)
2162-
: long_long_value(x) {}
2163-
constexpr FMT_ALWAYS_INLINE value(unsigned long long x FMT_BUILTIN)
2159+
constexpr FMT_INLINE value(long long x FMT_BUILTIN) : long_long_value(x) {}
2160+
constexpr FMT_INLINE value(unsigned long long x FMT_BUILTIN)
21642161
: ulong_long_value(x) {}
2165-
FMT_ALWAYS_INLINE value(int128_opt x FMT_BUILTIN) : int128_value(x) {}
2166-
FMT_ALWAYS_INLINE value(uint128_opt x FMT_BUILTIN) : uint128_value(x) {}
2167-
constexpr FMT_ALWAYS_INLINE value(bool x FMT_BUILTIN) : bool_value(x) {}
2162+
FMT_INLINE value(int128_opt x FMT_BUILTIN) : int128_value(x) {}
2163+
FMT_INLINE value(uint128_opt x FMT_BUILTIN) : uint128_value(x) {}
2164+
constexpr FMT_INLINE value(bool x FMT_BUILTIN) : bool_value(x) {}
21682165

21692166
template <int N>
2170-
constexpr FMT_ALWAYS_INLINE value(bitint<N> x FMT_BUILTIN)
2171-
: long_long_value(x) {
2167+
constexpr FMT_INLINE value(bitint<N> x FMT_BUILTIN) : long_long_value(x) {
21722168
static_assert(N <= 64, "unsupported _BitInt");
21732169
}
21742170
template <int N>
2175-
constexpr FMT_ALWAYS_INLINE value(ubitint<N> x FMT_BUILTIN)
2176-
: ulong_long_value(x) {
2171+
constexpr FMT_INLINE value(ubitint<N> x FMT_BUILTIN) : ulong_long_value(x) {
21772172
static_assert(N <= 64, "unsupported _BitInt");
21782173
}
21792174

21802175
template <typename T, FMT_ENABLE_IF(is_char<T>::value)>
2181-
constexpr FMT_ALWAYS_INLINE value(T x FMT_BUILTIN) : char_value(x) {
2176+
constexpr FMT_INLINE value(T x FMT_BUILTIN) : char_value(x) {
21822177
static_assert(
21832178
std::is_same<T, char>::value || std::is_same<T, char_type>::value,
21842179
"mixing character types is disallowed");
21852180
}
21862181

2187-
constexpr FMT_ALWAYS_INLINE value(float x FMT_BUILTIN) : float_value(x) {}
2188-
constexpr FMT_ALWAYS_INLINE value(double x FMT_BUILTIN) : double_value(x) {}
2189-
FMT_ALWAYS_INLINE value(long double x FMT_BUILTIN) : long_double_value(x) {}
2182+
constexpr FMT_INLINE value(float x FMT_BUILTIN) : float_value(x) {}
2183+
constexpr FMT_INLINE value(double x FMT_BUILTIN) : double_value(x) {}
2184+
FMT_INLINE value(long double x FMT_BUILTIN) : long_double_value(x) {}
21902185

2191-
FMT_CONSTEXPR FMT_ALWAYS_INLINE value(char_type* x FMT_BUILTIN) {
2186+
FMT_CONSTEXPR FMT_INLINE value(char_type* x FMT_BUILTIN) {
21922187
string.data = x;
21932188
if (is_constant_evaluated()) string.size = 0;
21942189
}
2195-
FMT_CONSTEXPR FMT_ALWAYS_INLINE value(const char_type* x FMT_BUILTIN) {
2190+
FMT_CONSTEXPR FMT_INLINE value(const char_type* x FMT_BUILTIN) {
21962191
string.data = x;
21972192
if (is_constant_evaluated()) string.size = 0;
21982193
}
@@ -2205,13 +2200,13 @@ template <typename Context> class value {
22052200
string.data = sv.data();
22062201
string.size = sv.size();
22072202
}
2208-
FMT_ALWAYS_INLINE value(void* x FMT_BUILTIN) : pointer(x) {}
2209-
FMT_ALWAYS_INLINE value(const void* x FMT_BUILTIN) : pointer(x) {}
2210-
FMT_ALWAYS_INLINE value(volatile void* x FMT_BUILTIN)
2203+
FMT_INLINE value(void* x FMT_BUILTIN) : pointer(x) {}
2204+
FMT_INLINE value(const void* x FMT_BUILTIN) : pointer(x) {}
2205+
FMT_INLINE value(volatile void* x FMT_BUILTIN)
22112206
: pointer(const_cast<const void*>(x)) {}
2212-
FMT_ALWAYS_INLINE value(const volatile void* x FMT_BUILTIN)
2207+
FMT_INLINE value(const volatile void* x FMT_BUILTIN)
22132208
: pointer(const_cast<const void*>(x)) {}
2214-
FMT_ALWAYS_INLINE value(nullptr_t) : pointer(nullptr) {}
2209+
FMT_INLINE value(nullptr_t) : pointer(nullptr) {}
22152210

22162211
template <typename T, FMT_ENABLE_IF(std::is_pointer<T>::value ||
22172212
std::is_member_pointer<T>::value)>
@@ -2233,7 +2228,7 @@ template <typename Context> class value {
22332228

22342229
template <typename T,
22352230
FMT_ENABLE_IF(use_formatter<T>::value || !FMT_BUILTIN_TYPES)>
2236-
FMT_CONSTEXPR20 FMT_ALWAYS_INLINE value(T& x) : value(x, custom_tag()) {}
2231+
FMT_CONSTEXPR20 FMT_INLINE value(T& x) : value(x, custom_tag()) {}
22372232

22382233
FMT_ALWAYS_INLINE value(const named_arg_info<char_type>* args, size_t size)
22392234
: named_args{args, size} {}

0 commit comments

Comments
 (0)