summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author卜部昌平 <[email protected]>2020-04-10 14:11:40 +0900
committer卜部昌平 <[email protected]>2020-04-13 16:06:00 +0900
commit4ff3f205408ff8bb413d69151105d301858136ba (patch)
tree0494fea3f4cdb82ec1d34e462438389dfea8b8da
parenta3f6f67967644f34226b4424227d2eec52fedd45 (diff)
add #include guard hack
According to MSVC manual (*1), cl.exe can skip including a header file when that: - contains #pragma once, or - starts with #ifndef, or - starts with #if ! defined. GCC has a similar trick (*2), but it acts more stricter (e. g. there must be _no tokens_ outside of #ifndef...#endif). Sun C lacked #pragma once for a looong time. Oracle Developer Studio 12.5 finally implemented it, but we cannot assume such recent version. This changeset modifies header files so that each of them include strictly one #ifndef...#endif. I believe this is the most portable way to trigger compiler optimizations. [Bug #16770] *1: https://docs.microsoft.com/en-us/cpp/preprocessor/once *2: https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3023
-rw-r--r--addr2line.h5
-rw-r--r--constant.h4
-rw-r--r--dln.h4
-rw-r--r--encindex.h4
-rw-r--r--include/ruby.h24
-rw-r--r--include/ruby/3/anyargs.h8
-rw-r--r--include/ruby/3/arithmetic.h5
-rw-r--r--include/ruby/3/arithmetic/char.h6
-rw-r--r--include/ruby/3/arithmetic/double.h6
-rw-r--r--include/ruby/3/arithmetic/fixnum.h6
-rw-r--r--include/ruby/3/arithmetic/gid_t.h6
-rw-r--r--include/ruby/3/arithmetic/int.h6
-rw-r--r--include/ruby/3/arithmetic/intptr_t.h6
-rw-r--r--include/ruby/3/arithmetic/long.h6
-rw-r--r--include/ruby/3/arithmetic/long_long.h6
-rw-r--r--include/ruby/3/arithmetic/mode_t.h6
-rw-r--r--include/ruby/3/arithmetic/off_t.h6
-rw-r--r--include/ruby/3/arithmetic/pid_t.h6
-rw-r--r--include/ruby/3/arithmetic/short.h6
-rw-r--r--include/ruby/3/arithmetic/size_t.h6
-rw-r--r--include/ruby/3/arithmetic/st_data_t.h6
-rw-r--r--include/ruby/3/arithmetic/uid_t.h6
-rw-r--r--include/ruby/3/assume.h6
-rw-r--r--include/ruby/3/attr/alloc_size.h12
-rw-r--r--include/ruby/3/attr/artificial.h12
-rw-r--r--include/ruby/3/attr/cold.h13
-rw-r--r--include/ruby/3/attr/const.h20
-rw-r--r--include/ruby/3/attr/constexpr.h24
-rw-r--r--include/ruby/3/attr/deprecated.h11
-rw-r--r--include/ruby/3/attr/diagnose_if.h11
-rw-r--r--include/ruby/3/attr/enum_extensibility.h12
-rw-r--r--include/ruby/3/attr/error.h12
-rw-r--r--include/ruby/3/attr/flag_enum.h12
-rw-r--r--include/ruby/3/attr/forceinline.h13
-rw-r--r--include/ruby/3/attr/format.h18
-rw-r--r--include/ruby/3/attr/maybe_unused.h14
-rw-r--r--include/ruby/3/attr/noalias.h12
-rw-r--r--include/ruby/3/attr/nodiscard.h15
-rw-r--r--include/ruby/3/attr/noexcept.h11
-rw-r--r--include/ruby/3/attr/noinline.h13
-rw-r--r--include/ruby/3/attr/nonnull.h12
-rw-r--r--include/ruby/3/attr/noreturn.h11
-rw-r--r--include/ruby/3/attr/pure.h19
-rw-r--r--include/ruby/3/attr/restrict.h11
-rw-r--r--include/ruby/3/attr/returns_nonnull.h11
-rw-r--r--include/ruby/3/attr/warning.h12
-rw-r--r--include/ruby/3/attr/weakref.h12
-rw-r--r--include/ruby/3/cast.h11
-rw-r--r--include/ruby/3/compiler_is.h13
-rw-r--r--include/ruby/3/compiler_is/apple.h11
-rw-r--r--include/ruby/3/compiler_is/clang.h11
-rw-r--r--include/ruby/3/compiler_is/gcc.h11
-rw-r--r--include/ruby/3/compiler_is/intel.h11
-rw-r--r--include/ruby/3/compiler_is/msvc.h11
-rw-r--r--include/ruby/3/compiler_is/sunpro.h11
-rw-r--r--include/ruby/3/compiler_since.h7
-rw-r--r--include/ruby/3/config.h6
-rw-r--r--include/ruby/3/constant_p.h12
-rw-r--r--include/ruby/3/core.h5
-rw-r--r--include/ruby/3/core/rarray.h6
-rw-r--r--include/ruby/3/core/rbasic.h6
-rw-r--r--include/ruby/3/core/rbignum.h6
-rw-r--r--include/ruby/3/core/rclass.h6
-rw-r--r--include/ruby/3/core/rdata.h6
-rw-r--r--include/ruby/3/core/rfile.h6
-rw-r--r--include/ruby/3/core/rhash.h6
-rw-r--r--include/ruby/3/core/rmatch.h6
-rw-r--r--include/ruby/3/core/robject.h6
-rw-r--r--include/ruby/3/core/rregexp.h6
-rw-r--r--include/ruby/3/core/rstring.h6
-rw-r--r--include/ruby/3/core/rstruct.h6
-rw-r--r--include/ruby/3/core/rtypeddata.h6
-rw-r--r--include/ruby/3/ctype.h6
-rw-r--r--include/ruby/3/dllexport.h6
-rw-r--r--include/ruby/3/dosish.h6
-rw-r--r--include/ruby/3/error.h6
-rw-r--r--include/ruby/3/eval.h6
-rw-r--r--include/ruby/3/event.h6
-rw-r--r--include/ruby/3/fl_type.h6
-rw-r--r--include/ruby/3/gc.h6
-rw-r--r--include/ruby/3/glob.h6
-rw-r--r--include/ruby/3/globals.h6
-rw-r--r--include/ruby/3/has/attribute.h11
-rw-r--r--include/ruby/3/has/builtin.h11
-rw-r--r--include/ruby/3/has/c_attribute.h11
-rw-r--r--include/ruby/3/has/cpp_attribute.h17
-rw-r--r--include/ruby/3/has/declspec_attribute.h12
-rw-r--r--include/ruby/3/has/extension.h12
-rw-r--r--include/ruby/3/has/feature.h12
-rw-r--r--include/ruby/3/has/warning.h12
-rw-r--r--include/ruby/3/intern/array.h6
-rw-r--r--include/ruby/3/intern/bignum.h6
-rw-r--r--include/ruby/3/intern/class.h6
-rw-r--r--include/ruby/3/intern/compar.h6
-rw-r--r--include/ruby/3/intern/complex.h6
-rw-r--r--include/ruby/3/intern/cont.h6
-rw-r--r--include/ruby/3/intern/dir.h6
-rw-r--r--include/ruby/3/intern/enum.h6
-rw-r--r--include/ruby/3/intern/enumerator.h6
-rw-r--r--include/ruby/3/intern/error.h6
-rw-r--r--include/ruby/3/intern/eval.h6
-rw-r--r--include/ruby/3/intern/file.h6
-rw-r--r--include/ruby/3/intern/gc.h6
-rw-r--r--include/ruby/3/intern/hash.h6
-rw-r--r--include/ruby/3/intern/io.h6
-rw-r--r--include/ruby/3/intern/load.h6
-rw-r--r--include/ruby/3/intern/marshal.h6
-rw-r--r--include/ruby/3/intern/numeric.h6
-rw-r--r--include/ruby/3/intern/object.h6
-rw-r--r--include/ruby/3/intern/parse.h6
-rw-r--r--include/ruby/3/intern/proc.h6
-rw-r--r--include/ruby/3/intern/process.h6
-rw-r--r--include/ruby/3/intern/random.h6
-rw-r--r--include/ruby/3/intern/range.h6
-rw-r--r--include/ruby/3/intern/rational.h6
-rw-r--r--include/ruby/3/intern/re.h6
-rw-r--r--include/ruby/3/intern/ruby.h6
-rw-r--r--include/ruby/3/intern/select.h6
-rw-r--r--include/ruby/3/intern/select/largesize.h6
-rw-r--r--include/ruby/3/intern/select/posix.h6
-rw-r--r--include/ruby/3/intern/select/win32.h6
-rw-r--r--include/ruby/3/intern/signal.h6
-rw-r--r--include/ruby/3/intern/sprintf.h6
-rw-r--r--include/ruby/3/intern/string.h6
-rw-r--r--include/ruby/3/intern/struct.h6
-rw-r--r--include/ruby/3/intern/thread.h7
-rw-r--r--include/ruby/3/intern/time.h8
-rw-r--r--include/ruby/3/intern/variable.h6
-rw-r--r--include/ruby/3/intern/vm.h6
-rw-r--r--include/ruby/3/interpreter.h7
-rw-r--r--include/ruby/3/iterator.h6
-rw-r--r--include/ruby/3/memory.h6
-rw-r--r--include/ruby/3/method.h6
-rw-r--r--include/ruby/3/module.h6
-rw-r--r--include/ruby/3/newobj.h6
-rw-r--r--include/ruby/3/rgengc.h6
-rw-r--r--include/ruby/3/scan_args.h6
-rw-r--r--include/ruby/3/special_consts.h7
-rw-r--r--include/ruby/3/static_assert.h16
-rw-r--r--include/ruby/3/stdalign.h16
-rw-r--r--include/ruby/3/stdbool.h6
-rw-r--r--include/ruby/3/symbol.h6
-rw-r--r--include/ruby/3/token_paste.h11
-rw-r--r--include/ruby/3/value.h6
-rw-r--r--include/ruby/3/value_type.h6
-rw-r--r--include/ruby/3/variable.h8
-rw-r--r--include/ruby/3/warning_push.h11
-rw-r--r--include/ruby/3/xmalloc.h6
-rw-r--r--include/ruby/assert.h6
-rw-r--r--include/ruby/backward.h10
-rw-r--r--include/ruby/backward/2/assume.h6
-rw-r--r--include/ruby/backward/2/attributes.h6
-rw-r--r--include/ruby/backward/2/bool.h6
-rw-r--r--include/ruby/backward/2/extern.h11
-rw-r--r--include/ruby/backward/2/gcc_version_since.h6
-rw-r--r--include/ruby/backward/2/inttypes.h6
-rw-r--r--include/ruby/backward/2/limits.h6
-rw-r--r--include/ruby/backward/2/long_long.h11
-rw-r--r--include/ruby/backward/2/r_cast.h6
-rw-r--r--include/ruby/backward/2/rmodule.h7
-rw-r--r--include/ruby/backward/2/stdalign.h6
-rw-r--r--include/ruby/backward/2/stdarg.h6
-rw-r--r--include/ruby/backward/classext.h15
-rw-r--r--include/ruby/backward/cxxanyargs.hpp5
-rw-r--r--include/ruby/backward/rubyio.h12
-rw-r--r--include/ruby/backward/rubysig.h27
-rw-r--r--include/ruby/backward/st.h12
-rw-r--r--include/ruby/backward/util.h12
-rw-r--r--include/ruby/debug.h25
-rw-r--r--include/ruby/defines.h6
-rw-r--r--include/ruby/encoding.h24
-rw-r--r--include/ruby/intern.h28
-rw-r--r--include/ruby/io.h24
-rw-r--r--include/ruby/missing.h7
-rw-r--r--include/ruby/re.h24
-rw-r--r--include/ruby/regex.h22
-rw-r--r--include/ruby/ruby.h28
-rw-r--r--include/ruby/subst.h10
-rw-r--r--include/ruby/thread.h24
-rw-r--r--include/ruby/thread_native.h23
-rw-r--r--include/ruby/util.h24
-rw-r--r--include/ruby/version.h31
-rw-r--r--include/ruby/vm.h24
-rw-r--r--internal.h24
-rw-r--r--internal/array.h6
-rw-r--r--internal/bignum.h6
-rw-r--r--internal/bits.h6
-rw-r--r--internal/class.h6
-rw-r--r--internal/compar.h6
-rw-r--r--internal/compile.h6
-rw-r--r--internal/compilers.h6
-rw-r--r--internal/complex.h8
-rw-r--r--internal/cont.h6
-rw-r--r--internal/dir.h6
-rw-r--r--internal/enc.h6
-rw-r--r--internal/encoding.h6
-rw-r--r--internal/enum.h6
-rw-r--r--internal/enumerator.h6
-rw-r--r--internal/error.h6
-rw-r--r--internal/eval.h6
-rw-r--r--internal/file.h6
-rw-r--r--internal/fixnum.h6
-rw-r--r--internal/gc.h6
-rw-r--r--internal/hash.h6
-rw-r--r--internal/imemo.h6
-rw-r--r--internal/inits.h6
-rw-r--r--internal/io.h6
-rw-r--r--internal/load.h6
-rw-r--r--internal/loadpath.h6
-rw-r--r--internal/math.h6
-rw-r--r--internal/missing.h6
-rw-r--r--internal/mjit.h6
-rw-r--r--internal/numeric.h6
-rw-r--r--internal/object.h6
-rw-r--r--internal/parse.h6
-rw-r--r--internal/proc.h6
-rw-r--r--internal/process.h6
-rw-r--r--internal/random.h6
-rw-r--r--internal/range.h6
-rw-r--r--internal/rational.h6
-rw-r--r--internal/re.h6
-rw-r--r--internal/sanitizers.h6
-rw-r--r--internal/serial.h6
-rw-r--r--internal/signal.h6
-rw-r--r--internal/static_assert.h6
-rw-r--r--internal/string.h6
-rw-r--r--internal/struct.h6
-rw-r--r--internal/symbol.h6
-rw-r--r--internal/thread.h6
-rw-r--r--internal/time.h6
-rw-r--r--internal/transcode.h6
-rw-r--r--internal/util.h6
-rw-r--r--internal/variable.h6
-rw-r--r--internal/vm.h6
-rw-r--r--internal/warnings.h6
-rw-r--r--iseq.h5
-rw-r--r--method.h4
-rw-r--r--missing/crypt.h5
-rw-r--r--missing/file.h3
-rw-r--r--mjit.h5
-rw-r--r--node.h5
-rw-r--r--ruby_assert.h11
-rw-r--r--symbol.h5
-rw-r--r--thread_pthread.h5
-rw-r--r--thread_win32.h5
-rw-r--r--transcode_data.h5
-rw-r--r--transient_heap.h5
-rw-r--r--variable.h12
-rw-r--r--version.h12
-rw-r--r--vm_callinfo.h13
-rw-r--r--vm_core.h5
-rw-r--r--vm_debug.h5
-rw-r--r--vm_exec.h5
-rw-r--r--vm_insnhelper.h5
-rw-r--r--vm_opts.h7
255 files changed, 1141 insertions, 1038 deletions
diff --git a/addr2line.h b/addr2line.h
index 4f6cf179ef..f09b665800 100644
--- a/addr2line.h
+++ b/addr2line.h
@@ -1,3 +1,5 @@
+#ifndef RUBY_ADDR2LINE_H
+#define RUBY_ADDR2LINE_H
/**********************************************************************
addr2line.h -
@@ -8,9 +10,6 @@
**********************************************************************/
-#ifndef RUBY_ADDR2LINE_H
-#define RUBY_ADDR2LINE_H
-
#if (defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H))
void
diff --git a/constant.h b/constant.h
index 1396651e21..e0d36909e1 100644
--- a/constant.h
+++ b/constant.h
@@ -1,3 +1,5 @@
+#ifndef CONSTANT_H
+#define CONSTANT_H
/**********************************************************************
constant.h -
@@ -8,8 +10,6 @@
Copyright (C) 2009 Yusuke Endoh
**********************************************************************/
-#ifndef CONSTANT_H
-#define CONSTANT_H
#include "ruby/ruby.h"
#include "id_table.h"
diff --git a/dln.h b/dln.h
index 9570de8f15..d8999635bc 100644
--- a/dln.h
+++ b/dln.h
@@ -1,3 +1,5 @@
+#ifndef DLN_H
+#define DLN_H
/**********************************************************************
dln.h -
@@ -9,8 +11,6 @@
**********************************************************************/
-#ifndef DLN_H
-#define DLN_H
#include "ruby/defines.h" /* for RUBY_SYMBOL_EXPORT_BEGIN */
#ifdef __cplusplus
diff --git a/encindex.h b/encindex.h
index baf70735ec..8457a7b39f 100644
--- a/encindex.h
+++ b/encindex.h
@@ -1,3 +1,5 @@
+#ifndef RUBY_ENCINDEX_H
+#define RUBY_ENCINDEX_H 1
/**********************************************************************
encindex.h -
@@ -9,8 +11,6 @@
**********************************************************************/
-#ifndef RUBY_ENCINDEX_H
-#define RUBY_ENCINDEX_H 1
#include "ruby/encoding.h" /* rb_ascii8bit_encindex etc. */
#if defined(__cplusplus)
extern "C" {
diff --git a/include/ruby.h b/include/ruby.h
index 076b5ce258..e530f4f0ad 100644
--- a/include/ruby.h
+++ b/include/ruby.h
@@ -1,17 +1,15 @@
-/**********************************************************************
-
- ruby.h -
-
- $Author$
- created at: Sun 10 12:06:15 Jun JST 2007
-
- Copyright (C) 2007-2008 Yukihiro Matsumoto
-
-**********************************************************************/
-
-#ifndef RUBY_H
+#ifndef RUBY_H /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_H 1
-
+/**
+ * @file
+ * @author $Author$
+ * @date Sun 10 12:06:15 Jun JST 2007
+ * @copyright 2007-2008 Yukihiro Matsumoto
+ * @copyright This file is a part of the programming language Ruby.
+ * Permission is hereby granted, to either redistribute and/or
+ * modify this file, provided that the conditions mentioned in the
+ * file COPYING are met. Consult the file for details.
+ */
#define HAVE_RUBY_DEFINES_H 1
#define HAVE_RUBY_ENCODING_H 1
#define HAVE_RUBY_INTERN_H 1
diff --git a/include/ruby/3/anyargs.h b/include/ruby/3/anyargs.h
index 7c2aa05c21..7eff1b2cc9 100644
--- a/include/ruby/3/anyargs.h
+++ b/include/ruby/3/anyargs.h
@@ -1,4 +1,6 @@
-/** \noop-*-C++-*-vi:ft=cpp
+#ifndef RUBY3_ANYARGS_H /*-*-C++-*-vi:se ft=cpp:*/
+#define RUBY3_ANYARGS_H
+/**
* @file
* @author Ruby developers <[email protected]>
* @copyright This file is a part of the programming language Ruby.
@@ -65,8 +67,6 @@
* `__builtin_types_compatible_p`, and in doing so we need to distinguish
* ::rb_f_notimplement from others, by type.
*/
-#ifndef RUBY3_ANYARGS_H
-#define RUBY3_ANYARGS_H
#include "ruby/3/attr/maybe_unused.h"
#include "ruby/3/attr/nonnull.h"
#include "ruby/3/attr/weakref.h"
@@ -371,4 +371,4 @@ RUBY3_ANYARGS_DECL(rb_define_method, VALUE, const char *)
#endif
-#endif /* RUBY3_ANYARGS_H */
+#endif /* RUBY3_ANYARGS_H */
diff --git a/include/ruby/3/arithmetic.h b/include/ruby/3/arithmetic.h
index 366014ac77..5dcdfcd9e4 100644
--- a/include/ruby/3/arithmetic.h
+++ b/include/ruby/3/arithmetic.h
@@ -1,4 +1,6 @@
-/** \noop-*-C++-*-vi:ft=cpp
+#ifndef RUBY3_ARITHMETIC_H /*-*-C++-*-vi:se ft=cpp:*/
+#define RUBY3_ARITHMETIC_H
+/**
* @file
* @author Ruby developers <[email protected]>
* @copyright This file is a part of the programming language Ruby.
@@ -33,3 +35,4 @@
#include "ruby/3/arithmetic/size_t.h"
#include "ruby/3/arithmetic/st_data_t.h"
#include "ruby/3/arithmetic/uid_t.h"
+#endif /* RUBY3_ARITHMETIC_H */
diff --git a/include/ruby/3/arithmetic/char.h b/include/ruby/3/arithmetic/char.h
index 94329b7a9e..03afa0a406 100644
--- a/include/ruby/3/arithmetic/char.h
+++ b/