aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-04-12 15:42:45 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-04-13 16:06:00 +0900
commitc37a357c13b399b79fb1ef197738f60cae472dbf (patch)
tree279ac6c7ce9a02a0d2fcd48e77bc42da1a8554c1 /include
parent4ff3f205408ff8bb413d69151105d301858136ba (diff)
downloadruby-c37a357c13b399b79fb1ef197738f60cae472dbf.tar.gz
include what you use.
This reverts commit 443389effc37308ce1a3c3a840082a344fc6af56. This reverts commit d94960f22ec2de3a3855305cb51343806d2b46c7. Inclusion of header files must be explicit. Every file shall directly include what is necessary. https://github.com/include-what-you-use/include-what-you-use says: > When every file includes what it uses, then it is possible to edit any > file and remove unused headers, without fear of accidentally breaking > the upwards dependencies of that file. It also becomes easy to > automatically track and update dependencies in the source code. Though we don't use iwyu itself, the principle quoted above is a good thing that we can agree. Now that include guards were added to every and all of the headers inside of our project this changeset does not increase compile time, at least on my machine.
Diffstat (limited to 'include')
-rw-r--r--include/ruby/3/anyargs.h1
-rw-r--r--include/ruby/3/arithmetic/int.h1
-rw-r--r--include/ruby/3/assume.h1
-rw-r--r--include/ruby/3/attr/alloc_size.h1
-rw-r--r--include/ruby/3/attr/artificial.h1
-rw-r--r--include/ruby/3/attr/cold.h1
-rw-r--r--include/ruby/3/attr/const.h2
-rw-r--r--include/ruby/3/attr/constexpr.h1
-rw-r--r--include/ruby/3/attr/deprecated.h2
-rw-r--r--include/ruby/3/attr/diagnose_if.h2
-rw-r--r--include/ruby/3/attr/enum_extensibility.h1
-rw-r--r--include/ruby/3/attr/error.h1
-rw-r--r--include/ruby/3/attr/flag_enum.h1
-rw-r--r--include/ruby/3/attr/forceinline.h2
-rw-r--r--include/ruby/3/attr/format.h1
-rw-r--r--include/ruby/3/attr/maybe_unused.h1
-rw-r--r--include/ruby/3/attr/nodiscard.h1
-rw-r--r--include/ruby/3/attr/noexcept.h1
-rw-r--r--include/ruby/3/attr/noinline.h1
-rw-r--r--include/ruby/3/attr/nonnull.h1
-rw-r--r--include/ruby/3/attr/noreturn.h2
-rw-r--r--include/ruby/3/attr/pure.h2
-rw-r--r--include/ruby/3/attr/restrict.h3
-rw-r--r--include/ruby/3/attr/returns_nonnull.h1
-rw-r--r--include/ruby/3/attr/warning.h1
-rw-r--r--include/ruby/3/attr/weakref.h1
-rw-r--r--include/ruby/3/cast.h3
-rw-r--r--include/ruby/3/config.h4
-rw-r--r--include/ruby/3/core/rdata.h1
-rw-r--r--include/ruby/3/has/attribute.h2
-rw-r--r--include/ruby/3/has/builtin.h2
-rw-r--r--include/ruby/3/has/cpp_attribute.h2
-rw-r--r--include/ruby/3/has/declspec_attribute.h2
-rw-r--r--include/ruby/3/static_assert.h1
-rw-r--r--include/ruby/3/stdalign.h2
-rw-r--r--include/ruby/3/token_paste.h3
-rw-r--r--include/ruby/3/warning_push.h1
-rw-r--r--include/ruby/backward/2/gcc_version_since.h1
-rw-r--r--include/ruby/backward/2/long_long.h2
39 files changed, 56 insertions, 4 deletions
diff --git a/include/ruby/3/anyargs.h b/include/ruby/3/anyargs.h
index 7eff1b2cc9..d85a49b8a1 100644
--- a/include/ruby/3/anyargs.h
+++ b/include/ruby/3/anyargs.h
@@ -72,6 +72,7 @@
#include "ruby/3/attr/weakref.h"
#include "ruby/3/cast.h"
#include "ruby/3/config.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/3/intern/class.h"
#include "ruby/3/intern/vm.h"
#include "ruby/3/method.h"
diff --git a/include/ruby/3/arithmetic/int.h b/include/ruby/3/arithmetic/int.h
index 8c2e9f2bd8..2ebf8081f9 100644
--- a/include/ruby/3/arithmetic/int.h
+++ b/include/ruby/3/arithmetic/int.h
@@ -31,6 +31,7 @@
#include "ruby/3/dllexport.h"
#include "ruby/3/special_consts.h"
#include "ruby/3/value.h"
+#include "ruby/3/warning_push.h"
#include "ruby/assert.h"
#define RB_INT2NUM rb_int2num_inline
diff --git a/include/ruby/3/assume.h b/include/ruby/3/assume.h
index 13928db934..9664f5606c 100644
--- a/include/ruby/3/assume.h
+++ b/include/ruby/3/assume.h
@@ -27,6 +27,7 @@
*/
#include "ruby/3/config.h"
#include "ruby/3/cast.h"
+#include "ruby/3/compiler_since.h"
#include "ruby/3/has/builtin.h"
#include "ruby/3/warning_push.h"
diff --git a/include/ruby/3/attr/alloc_size.h b/include/ruby/3/attr/alloc_size.h
index 251a19f7f3..5d4ece08a1 100644
--- a/include/ruby/3/attr/alloc_size.h
+++ b/include/ruby/3/attr/alloc_size.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_ALLOC_SIZE.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((alloc_size))` */
#if RUBY3_HAS_ATTRIBUTE(alloc_size)
diff --git a/include/ruby/3/attr/artificial.h b/include/ruby/3/attr/artificial.h
index a9f305daab..f5450e3467 100644
--- a/include/ruby/3/attr/artificial.h
+++ b/include/ruby/3/attr/artificial.h
@@ -34,6 +34,7 @@
* case it gets vital to know where the inlining happened in the callee.
* See also https://stackoverflow.com/a/21936099
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((artificial))` */
#if RUBY3_HAS_ATTRIBUTE(artificial)
diff --git a/include/ruby/3/attr/cold.h b/include/ruby/3/attr/cold.h
index 5b5263feb0..3822f0a975 100644
--- a/include/ruby/3/attr/cold.h
+++ b/include/ruby/3/attr/cold.h
@@ -21,6 +21,7 @@
* @brief Defines #RUBY3_ATTR_COLD.
*/
#include "ruby/3/compiler_is.h"
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((cold))` */
#if RUBY3_COMPILER_IS(SunPro)
diff --git a/include/ruby/3/attr/const.h b/include/ruby/3/attr/const.h
index d97495c647..6c36e9aab2 100644
--- a/include/ruby/3/attr/const.h
+++ b/include/ruby/3/attr/const.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_CONST.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/declspec_attribute.h"
/** Wraps (or simulates) `__attribute__((const))` */
diff --git a/include/ruby/3/attr/constexpr.h b/include/ruby/3/attr/constexpr.h
index 582d9fd000..576ec7fb8f 100644
--- a/include/ruby/3/attr/constexpr.h
+++ b/include/ruby/3/attr/constexpr.h
@@ -22,6 +22,7 @@
*/
#include "ruby/3/has/feature.h"
#include "ruby/3/compiler_is.h"
+#include "ruby/3/token_paste.h"
/** @cond INTERNAL_MACRO */
#if ! defined(__cplusplus)
diff --git a/include/ruby/3/attr/deprecated.h b/include/ruby/3/attr/deprecated.h
index 9f939a5e8c..5c3f508ffc 100644
--- a/include/ruby/3/attr/deprecated.h
+++ b/include/ruby/3/attr/deprecated.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_DEPRECATED.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/c_attribute.h"
#include "ruby/3/has/cpp_attribute.h"
#include "ruby/3/has/declspec_attribute.h"
diff --git a/include/ruby/3/attr/diagnose_if.h b/include/ruby/3/attr/diagnose_if.h
index 488c3ec7ad..2f09abc94d 100644
--- a/include/ruby/3/attr/diagnose_if.h
+++ b/include/ruby/3/attr/diagnose_if.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_DIAGNOSE_IF.
*/
+#include "ruby/3/has/attribute.h"
+#include "ruby/3/warning_push.h"
/** Wraps (or simulates) `__attribute__((diagnose_if))` */
#if RUBY3_COMPILER_BEFORE(Clang, 5, 0, 0)
diff --git a/include/ruby/3/attr/enum_extensibility.h b/include/ruby/3/attr/enum_extensibility.h
index a56d1a54b8..15a5b063f2 100644
--- a/include/ruby/3/attr/enum_extensibility.h
+++ b/include/ruby/3/attr/enum_extensibility.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief #RUBY3_ATTR_ENUM_EXTENSIBILITY.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((enum_extensibility))` */
#if RUBY3_HAS_ATTRIBUTE(enum_extensibility)
diff --git a/include/ruby/3/attr/error.h b/include/ruby/3/attr/error.h
index ee5e3290ae..53628259a0 100644
--- a/include/ruby/3/attr/error.h
+++ b/include/ruby/3/attr/error.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_ERROR.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((error))` */
#if RUBY3_HAS_ATTRIBUTE(error)
diff --git a/include/ruby/3/attr/flag_enum.h b/include/ruby/3/attr/flag_enum.h
index 7165347bd7..2081c9c3ed 100644
--- a/include/ruby/3/attr/flag_enum.h
+++ b/include/ruby/3/attr/flag_enum.h
@@ -21,6 +21,7 @@
* @brief Defines #RUBY3_ATTR_FLAG_ENUM.
* @see https://clang.llvm.org/docs/AttributeReference.html#flag_enum
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((flag_enum)` */
#if RUBY3_HAS_ATTRIBUTE(flag_enum)
diff --git a/include/ruby/3/attr/forceinline.h b/include/ruby/3/attr/forceinline.h
index 3c865e9c4b..bd622eddce 100644
--- a/include/ruby/3/attr/forceinline.h
+++ b/include/ruby/3/attr/forceinline.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_FORCEINLINE.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
/**
* Wraps (or simulates) `__forceinline`. MSVC complains on declarations like
diff --git a/include/ruby/3/attr/format.h b/include/ruby/3/attr/format.h
index c234034afe..2624179bda 100644
--- a/include/ruby/3/attr/format.h
+++ b/include/ruby/3/attr/format.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_FORMAT.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((format))` */
#if RUBY3_HAS_ATTRIBUTE(format)
diff --git a/include/ruby/3/attr/maybe_unused.h b/include/ruby/3/attr/maybe_unused.h
index f814804e9f..71904dffa4 100644
--- a/include/ruby/3/attr/maybe_unused.h
+++ b/include/ruby/3/attr/maybe_unused.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_MAYBE_UNUSED.
*/
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/c_attribute.h"
#include "ruby/3/has/cpp_attribute.h"
diff --git a/include/ruby/3/attr/nodiscard.h b/include/ruby/3/attr/nodiscard.h
index 0142d22bd4..6168bb9002 100644
--- a/include/ruby/3/attr/nodiscard.h
+++ b/include/ruby/3/attr/nodiscard.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_NODISCARD.
*/
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/c_attribute.h"
#include "ruby/3/has/cpp_attribute.h"
diff --git a/include/ruby/3/attr/noexcept.h b/include/ruby/3/attr/noexcept.h
index a99ca0b35c..aff3b2cb1b 100644
--- a/include/ruby/3/attr/noexcept.h
+++ b/include/ruby/3/attr/noexcept.h
@@ -61,6 +61,7 @@
* Itanium C++ ABI has zero-cost exception handling), but does impact on
* generated binary size. This is bad.
*/
+#include "ruby/3/compiler_since.h"
#include "ruby/3/has/feature.h"
/** Wraps (or simulates) C++11 `noexcept` */
diff --git a/include/ruby/3/attr/noinline.h b/include/ruby/3/attr/noinline.h
index e5eca8eaef..4437f8a32f 100644
--- a/include/ruby/3/attr/noinline.h
+++ b/include/ruby/3/attr/noinline.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_NOINLINE.
*/
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/declspec_attribute.h"
/** Wraps (or simulates) `__declspec(noinline)` */
diff --git a/include/ruby/3/attr/nonnull.h b/include/ruby/3/attr/nonnull.h
index 4c2f3f1ca0..01b5820c1b 100644
--- a/include/ruby/3/attr/nonnull.h
+++ b/include/ruby/3/attr/nonnull.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_NONNULL.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((nonnull))` */
#if RUBY3_HAS_ATTRIBUTE(nonnull)
diff --git a/include/ruby/3/attr/noreturn.h b/include/ruby/3/attr/noreturn.h
index 2b7051428d..999a76b8e5 100644
--- a/include/ruby/3/attr/noreturn.h
+++ b/include/ruby/3/attr/noreturn.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_NORETURN.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/cpp_attribute.h"
#include "ruby/3/has/declspec_attribute.h"
diff --git a/include/ruby/3/attr/pure.h b/include/ruby/3/attr/pure.h
index 038fd2abdb..b9ab3622ca 100644
--- a/include/ruby/3/attr/pure.h
+++ b/include/ruby/3/attr/pure.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_PURE.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/assert.h"
/** Wraps (or simulates) `__attribute__((pure))` */
diff --git a/include/ruby/3/attr/restrict.h b/include/ruby/3/attr/restrict.h
index f6d7936b3a..95c85f45ce 100644
--- a/include/ruby/3/attr/restrict.h
+++ b/include/ruby/3/attr/restrict.h
@@ -20,6 +20,9 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_RESTRICT.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/attribute.h"
+#include "ruby/3/token_paste.h"
/* :FIXME: config.h includes conflicting `#define restrict`. MSVC can be
* detected using `RUBY3_COMPILER_SINCE()`, but Clang & family cannot use
diff --git a/include/ruby/3/attr/returns_nonnull.h b/include/ruby/3/attr/returns_nonnull.h
index eb8db1d045..786e7e72ee 100644
--- a/include/ruby/3/attr/returns_nonnull.h
+++ b/include/ruby/3/attr/returns_nonnull.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_RETURNS_NONNULL.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((returns_nonnull))` */
#if defined(_Ret_nonnull_)
diff --git a/include/ruby/3/attr/warning.h b/include/ruby/3/attr/warning.h
index 0c64e6a834..a83537e209 100644
--- a/include/ruby/3/attr/warning.h
+++ b/include/ruby/3/attr/warning.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_WARNING.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((warning))` */
#if RUBY3_HAS_ATTRIBUTE(warning)
diff --git a/include/ruby/3/attr/weakref.h b/include/ruby/3/attr/weakref.h
index a540266219..e9c38f92e7 100644
--- a/include/ruby/3/attr/weakref.h
+++ b/include/ruby/3/attr/weakref.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_ATTR_WEAKREF.
*/
+#include "ruby/3/has/attribute.h"
/** Wraps (or simulates) `__attribute__((weakref))` */
#if RUBY3_HAS_ATTRIBUTE(weakref)
diff --git a/include/ruby/3/cast.h b/include/ruby/3/cast.h
index 7f0dce9010..254e10fee3 100644
--- a/include/ruby/3/cast.h
+++ b/include/ruby/3/cast.h
@@ -25,6 +25,9 @@
* public headers. They could be used from C++, and C-style casts could issue
* warnings. Ruby internals are pure C so they should not bother.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/warning.h"
+#include "ruby/3/warning_push.h"
#if ! defined(__cplusplus)
# define RUBY3_CAST(expr) (expr)
diff --git a/include/ruby/3/config.h b/include/ruby/3/config.h
index 158e8635cb..32d50bf0d6 100644
--- a/include/ruby/3/config.h
+++ b/include/ruby/3/config.h
@@ -27,10 +27,6 @@
#endif
#include "ruby/3/compiler_since.h"
-#include "ruby/3/has/warning.h"
-#include "ruby/3/has/attribute.h"
-#include "ruby/3/warning_push.h"
-#include "ruby/3/token_paste.h"
#if defined(__cplusplus)
#/* __builtin_choose_expr and __builtin_types_compatible aren't available
diff --git a/include/ruby/3/core/rdata.h b/include/ruby/3/core/rdata.h
index 6df6ea9e6d..383785af4c 100644
--- a/include/ruby/3/core/rdata.h
+++ b/include/ruby/3/core/rdata.h
@@ -32,6 +32,7 @@
#include "ruby/3/core/rbasic.h"
#include "ruby/3/dllexport.h"
#include "ruby/3/fl_type.h"
+#include "ruby/3/token_paste.h"
#include "ruby/3/value.h"
#include "ruby/3/value_type.h"
#include "ruby/defines.h"
diff --git a/include/ruby/3/has/attribute.h b/include/ruby/3/has/attribute.h
index c8ad7da9cf..14c4ff5596 100644
--- a/include/ruby/3/has/attribute.h
+++ b/include/ruby/3/has/attribute.h
@@ -21,6 +21,8 @@
* @brief Defines #RUBY3_HAS_ATTRIBUTE.
*/
#include "ruby/3/config.h"
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/token_paste.h"
/** Wraps (or simulates) `__has_attribute`. */
#if defined(__has_attribute)
diff --git a/include/ruby/3/has/builtin.h b/include/ruby/3/has/builtin.h
index f1524061ae..92a528d022 100644
--- a/include/ruby/3/has/builtin.h
+++ b/include/ruby/3/has/builtin.h
@@ -21,6 +21,8 @@
* @brief Defines #RUBY3_HAS_BUILTIN.
*/
#include "ruby/3/config.h"
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/token_paste.h"
/** Wraps (or simulates) `__has_builtin`. */
#if defined(__has_builtin) && ! RUBY3_COMPILER_IS(Intel)
diff --git a/include/ruby/3/has/cpp_attribute.h b/include/ruby/3/has/cpp_attribute.h
index 42209c0955..941f7ddca3 100644
--- a/include/ruby/3/has/cpp_attribute.h
+++ b/include/ruby/3/has/cpp_attribute.h
@@ -21,6 +21,8 @@
* @brief Defines #RUBY3_HAS_CPP_ATTRIBUTE.
*/
#include "ruby/3/compiler_is.h"
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/token_paste.h"
/** @cond INTERNAL_MACRO */
#if defined(__has_cpp_attribute)
diff --git a/include/ruby/3/has/declspec_attribute.h b/include/ruby/3/has/declspec_attribute.h
index 4774eb88f2..33bd3cb6ee 100644
--- a/include/ruby/3/has/declspec_attribute.h
+++ b/include/ruby/3/has/declspec_attribute.h
@@ -20,6 +20,8 @@
* extension libraries. They could be written in C++98.
* @brief Defines #RUBY3_HAS_DECLSPEC_ATTRIBUTE.
*/
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/token_paste.h"
/** Wraps (or simulates) `__has_declspec_attribute`. */
#if defined(__has_declspec_attribute)
diff --git a/include/ruby/3/static_assert.h b/include/ruby/3/static_assert.h
index b9c842f3b6..5d0e84c439 100644
--- a/include/ruby/3/static_assert.h
+++ b/include/ruby/3/static_assert.h
@@ -22,6 +22,7 @@
*/
#include <assert.h>
#include "ruby/3/has/extension.h"
+#include "ruby/3/compiler_since.h"
/** @cond INTERNAL_MACRO */
#if defined(__cplusplus) && defined(__cpp_static_assert)
diff --git a/include/ruby/3/stdalign.h b/include/ruby/3/stdalign.h
index ccc68b66df..dab020b735 100644
--- a/include/ruby/3/stdalign.h
+++ b/include/ruby/3/stdalign.h
@@ -27,8 +27,10 @@
#endif
#include "ruby/3/compiler_is.h"
+#include "ruby/3/compiler_since.h"
#include "ruby/3/has/feature.h"
#include "ruby/3/has/extension.h"
+#include "ruby/3/has/attribute.h"
#include "ruby/3/has/declspec_attribute.h"
/**
diff --git a/include/ruby/3/token_paste.h b/include/ruby/3/token_paste.h
index 4e6dbb4834..8c765ef706 100644
--- a/include/ruby/3/token_paste.h
+++ b/include/ruby/3/token_paste.h
@@ -21,6 +21,9 @@
* @brief Defines #RUBY3_TOKEN_PASTE.
*/
#include "ruby/3/config.h"
+#include "ruby/3/compiler_since.h"
+#include "ruby/3/has/warning.h"
+#include "ruby/3/warning_push.h"
/* :TODO: add your compiler here. There are many compilers that can suppress
* warnings via pragmas, but not all of them accept such things inside of `#if`
diff --git a/include/ruby/3/warning_push.h b/include/ruby/3/warning_push.h
index c3384f2d75..2affb3abb1 100644
--- a/include/ruby/3/warning_push.h
+++ b/include/ruby/3/warning_push.h
@@ -44,6 +44,7 @@
* ```
*/
#include "ruby/3/compiler_is.h"
+#include "ruby/3/compiler_since.h"
#if RUBY3_COMPILER_SINCE(MSVC, 12, 0, 0)
# /* Not sure exactly when but it seems VC++ 6.0 is a version with it.*/
diff --git a/include/ruby/backward/2/gcc_version_since.h b/include/ruby/backward/2/gcc_version_since.h
index 553b982147..03f767aedb 100644
--- a/include/ruby/backward/2/gcc_version_since.h
+++ b/include/ruby/backward/2/gcc_version_since.h
@@ -20,6 +20,7 @@
* extension libraries. They could be written in C++98.
* @brief Defines old #GCC_VERSION_SINCE
*/
+#include "ruby/3/compiler_since.h"
#ifndef GCC_VERSION_SINCE
#define GCC_VERSION_SINCE(x, y, z) RUBY3_COMPILER_SINCE(GCC, (x), (y), (z))
diff --git a/include/ruby/backward/2/long_long.h b/include/ruby/backward/2/long_long.h
index 2a9b9e7f40..3b2261b71f 100644
--- a/include/ruby/backward/2/long_long.h
+++ b/include/ruby/backward/2/long_long.h
@@ -26,6 +26,8 @@
* compatibility only.
*/
#include "ruby/3/config.h"
+#include "ruby/3/has/warning.h"
+#include "ruby/3/warning_push.h"
#if RUBY3_HAS_WARNING("-Wc++11-long-long")
# define HAVE_TRUE_LONG_LONG 1