summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-09-24 10:58:01 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-09-25 11:38:33 +0900
commite75aed7abb7f869223ea05a2f96b2021b57bd98a (patch)
tree7a30e697ab94306ae5b253855b1614e51152961e
parent0b77a86d1ec3a8bb3d62ea38a93d7aed44dd2c0c (diff)
RBIMPL_ALIGNOF: do not use constexpr
Was definitely a bad idea to use constexpr. It is not ubiquitous.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3570
-rw-r--r--include/ruby/internal/stdalign.h24
1 files changed, 8 insertions, 16 deletions
diff --git a/include/ruby/internal/stdalign.h b/include/ruby/internal/stdalign.h
index 8d9a0d21e0..2bd8d94197 100644
--- a/include/ruby/internal/stdalign.h
+++ b/include/ruby/internal/stdalign.h
@@ -26,14 +26,9 @@
# include <stddef.h>
#endif
-#include "ruby/internal/attr/artificial.h"
-#include "ruby/internal/attr/const.h"
-#include "ruby/internal/attr/constexpr.h"
-#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/compiler_is.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/declspec_attribute.h"
-#include "ruby/internal/has/extension.h"
#include "ruby/internal/has/feature.h"
/**
@@ -95,24 +90,21 @@
#elif defined(__cplusplus)
# /* C++11 `alignof()` can be buggy. */
# /* see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69560 */
-# /* But don't worry, we can use templates and `constexpr`. */
-# define RBIMPL_ALIGNOF(T) ruby::rbimpl_alignof<T>()
+# /* But don't worry, we can use templates. */
+# define RBIMPL_ALIGNOF(T) (static_cast<size_t>(ruby::rbimpl_alignof<T>::value))
namespace ruby {
template<typename T>
-RBIMPL_ATTR_CONSTEXPR(CXX11)
-RBIMPL_ATTR_ARTIFICIAL()
-RBIMPL_ATTR_FORCEINLINE()
-RBIMPL_ATTR_CONST()
-static size_t
-rbimpl_alignof()
-{
+struct rbimpl_alignof {
typedef struct {
char _;
T t;
} type;
- return offsetof(type, t);
-}
+
+ enum {
+ value = offsetof(type, t)
+ };
+};
}
#elif RBIMPL_COMPILER_IS(MSVC)