aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-01 01:05:48 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-01 01:05:48 +0000
commitff113d52f799d433b6d5d96f86944d2d761e3530 (patch)
treee578c9cded5ee54d954d5bfa28f6517633b7ddd4
parent586c174922fc3be5181a59585ec27a75f6b29a1c (diff)
downloadruby-ff113d52f799d433b6d5d96f86944d2d761e3530.tar.gz
configure.in: FUNC_UNOPTIMIZED
* configure.in: check if optimize pragma is supported. * include/ruby/defines.h (FUNC_UNOPTIMIZED): fallback definition. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--configure.in1
-rw-r--r--include/ruby/defines.h3
-rw-r--r--missing/explicit_bzero.c6
3 files changed, 8 insertions, 2 deletions
diff --git a/configure.in b/configure.in
index 916d93a1b8..2f8d4af02e 100644
--- a/configure.in
+++ b/configure.in
@@ -1757,6 +1757,7 @@ if_i386=${universal_binary+[defined __i386__]}
RUBY_FUNC_ATTRIBUTE(stdcall, [], [], ${if_i386})
RUBY_FUNC_ATTRIBUTE(cdecl, [], [], ${if_i386})
RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386})
+RUBY_FUNC_ATTRIBUTE(optimize("O0"), FUNC_UNOPTIMIZED, rb_cv_func_unoptimized)
RUBY_FUNC_ATTRIBUTE(optimize("-Os","-fomit-frame-pointer"), FUNC_MINIMIZED, rb_cv_func_minimized)
if test "$GCC" = yes; then
diff --git a/include/ruby/defines.h b/include/ruby/defines.h
index 54a56ff9e6..b4d75294d4 100644
--- a/include/ruby/defines.h
+++ b/include/ruby/defines.h
@@ -244,6 +244,9 @@ void rb_ia64_flushrs(void);
#ifndef FUNC_MINIMIZED
#define FUNC_MINIMIZED(x) x
#endif
+#ifndef FUNC_UNOPTIMIZED
+#define FUNC_UNOPTIMIZED(x) x
+#endif
#ifndef RUBY_ALIAS_FUNCTION_TYPE
#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \
FUNC_MINIMIZED(type prot) {return (type)name args;}
diff --git a/missing/explicit_bzero.c b/missing/explicit_bzero.c
index c89bdbc0a8..e7bb11e69f 100644
--- a/missing/explicit_bzero.c
+++ b/missing/explicit_bzero.c
@@ -12,13 +12,15 @@
* http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1381.pdf
*/
-#ifdef __GNUC__
-#pragma GCC optimize ("O0")
+#ifndef FUNC_UNOPTIMIZED
+# define FUNC_UNOPTIMIZED(x) x
#endif
#ifndef HAVE_EXPLICIT_BZERO
/* Similar to bzero(), but have a guarantee not to be eliminated from compiler
optimization. */
+FUNC_UNOPTIMIZED(void explicit_bzero(void *b, size_t len));
+
void
explicit_bzero(void *b, size_t len)
{