summaryrefslogtreecommitdiffstats
path: root/libcilkrts/runtime
diff options
context:
space:
mode:
authorbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-30 22:51:29 +0000
committerbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-30 22:51:29 +0000
commit02c15cf3eeed878ff26307a175aef11b6feb183d (patch)
tree5bc13973eb8a17b5f36bfb2e0458f2b38047ee49 /libcilkrts/runtime
parent9cd65e0501466bd4f3678c36d87b1ec9492c5997 (diff)
downloadppe42-gcc-02c15cf3eeed878ff26307a175aef11b6feb183d.tar.gz
ppe42-gcc-02c15cf3eeed878ff26307a175aef11b6feb183d.zip
Fix for bug Bootstrap/58918.
+2013-10-30 Balaji V. Iyer <balaji.v.iyer@intel.com> + + * configure: Reconfigured. + * configure.ac: Add AC_FUNC_ALLOCA. + * runtime/sysdep-unix.c: Added check for alloca.h before + including it. + * config/x86/cilk-abi-vla.c: Likewise. + * runtime/cilk_fiber-unix.cpp: Likewise. + git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204232 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcilkrts/runtime')
-rw-r--r--libcilkrts/runtime/cilk_fiber-unix.cpp19
-rw-r--r--libcilkrts/runtime/config/x86/cilk-abi-vla.c23
-rw-r--r--libcilkrts/runtime/sysdep-unix.c15
3 files changed, 52 insertions, 5 deletions
diff --git a/libcilkrts/runtime/cilk_fiber-unix.cpp b/libcilkrts/runtime/cilk_fiber-unix.cpp
index b9b47e364a5..4895c9c5d71 100644
--- a/libcilkrts/runtime/cilk_fiber-unix.cpp
+++ b/libcilkrts/runtime/cilk_fiber-unix.cpp
@@ -44,7 +44,20 @@
#include <cstdio>
#include <cstdlib>
-#include <alloca.h>
+#if defined HAVE_ALLOCA_H
+# include <alloca.h>
+#elif defined __GNUC__
+# define alloca __builtin_alloca
+#elif defined _AIX
+# define alloca __alloca
+#else
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+#endif
+
#include <errno.h>
#include <sys/mman.h>
#include <unistd.h>
@@ -150,7 +163,8 @@ NORETURN cilk_fiber_sysdep::jump_to_resume_other_sysdep(cilk_fiber_sysdep* other
__cilkrts_bug("Should not get here");
}
-
+#pragma GCC push_options
+#pragma GCC optimize ("-O0")
NORETURN cilk_fiber_sysdep::run()
{
// Only fibers created from a pool have a proc method to run and execute.
@@ -214,6 +228,7 @@ NORETURN cilk_fiber_sysdep::run()
// User proc should never return.
__cilkrts_bug("Should not get here");
}
+#pragma GCC pop_options
void cilk_fiber_sysdep::make_stack(size_t stack_size)
{
diff --git a/libcilkrts/runtime/config/x86/cilk-abi-vla.c b/libcilkrts/runtime/config/x86/cilk-abi-vla.c
index 2d38e7f9a56..38c2630a1e6 100644
--- a/libcilkrts/runtime/config/x86/cilk-abi-vla.c
+++ b/libcilkrts/runtime/config/x86/cilk-abi-vla.c
@@ -58,15 +58,34 @@
#include <assert.h>
#include <stdlib.h>
#include <stdint.h>
-#ifdef _WIN32
+
+// Getting a definition for alloca appears to be a pain in the butt. Here's
+// a variant on what's recommended in the autoconf doc
+#if defined _MSC_VER
+# include <malloc.h>
# define alloca _alloca
+#elif defined HAVE_ALLOCA_H
+# include <alloca.h>
+#elif defined __GNUC__
+# define alloca __builtin_alloca
+#elif defined _AIX
+# define alloca __alloca
+#else
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+#endif
+
+#ifdef _WIN32
# define INLINE static __inline
# pragma warning(disable:1025) // Don't whine about zero extending result of unary operation
#else
-# include <alloca.h>
# define INLINE static inline
#endif
+
#include "internal/abi.h"
#include "cilk-abi-vla-internal.h"
diff --git a/libcilkrts/runtime/sysdep-unix.c b/libcilkrts/runtime/sysdep-unix.c
index 194681fffc5..1f82b6288a1 100644
--- a/libcilkrts/runtime/sysdep-unix.c
+++ b/libcilkrts/runtime/sysdep-unix.c
@@ -80,7 +80,20 @@
#include <string.h>
#include <pthread.h>
#include <unistd.h>
-#include <alloca.h>
+
+#if defined HAVE_ALLOCA_H
+# include <alloca.h>
+#elif defined __GNUC__
+# define alloca __builtin_alloca
+#elif defined _AIX
+# define alloca __alloca
+#else
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+#endif
#ifdef __APPLE__
//# include <scheduler.h> // Angle brackets include Apple's scheduler.h, not ours.
OpenPOWER on IntegriCloud