[pypy-svn] r73532 - in pypy/trunk/pypy: module/signal translator/c/src
benjamin at codespeak.net
benjamin at codespeak.net
Thu Apr 8 03:35:28 CEST 2010
Author: benjamin
Date: Thu Apr 8 03:35:21 2010
New Revision: 73532
Modified:
pypy/trunk/pypy/module/signal/interp_signal.py
pypy/trunk/pypy/translator/c/src/signals.h
Log:
use a struct for pypysig_occurred in signals.h
This kills some strict aliasing warnings.
Modified: pypy/trunk/pypy/module/signal/interp_signal.py
==============================================================================
--- pypy/trunk/pypy/module/signal/interp_signal.py (original)
+++ pypy/trunk/pypy/module/signal/interp_signal.py Thu Apr 8 03:35:21 2010
@@ -39,7 +39,10 @@
# pointless and a performance issue
# don't use rffi.LONGP because the JIT doesn't support raw arrays so far
-LONG_STRUCT = lltype.Struct('LONG_STRUCT', ('value', lltype.Signed))
+struct_name = 'pypysig_long_struct'
+LONG_STRUCT = lltype.Struct(struct_name, ('c_value', lltype.Signed),
+ hints={'c_name' : struct_name, 'external' : 'C'})
+del struct_name
pypysig_getaddr_occurred = external('pypysig_getaddr_occurred', [],
lltype.Ptr(LONG_STRUCT), _nowrapper=True,
@@ -51,10 +54,10 @@
class SignalActionFlag(AbstractActionFlag):
def get(self):
p = pypysig_getaddr_occurred()
- return p.value
+ return p.c_value
def set(self, value):
p = pypysig_getaddr_occurred()
- p.value = value
+ p.c_value = value
class CheckSignalAction(AsyncAction):
Modified: pypy/trunk/pypy/translator/c/src/signals.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/signals.h (original)
+++ pypy/trunk/pypy/translator/c/src/signals.h Thu Apr 8 03:35:21 2010
@@ -70,7 +70,11 @@
cleared again. The variable is exposed and RPython code is free to
use the other bits in any way. */
#define PENDING_SIGNAL_BIT (LONG_MIN) /* high bit */
-extern long pypysig_occurred;
+/* This is a struct for the JIT. See interp_signal.py. */
+struct pypysig_long_struct {
+ long value;
+};
+extern struct pypysig_long_struct pypysig_occurred;
/* some C tricks to get/set the variable as efficiently as possible:
use macros when compiling as a stand-alone program, but still
@@ -87,9 +91,8 @@
#ifndef PYPY_NOT_MAIN_FILE
-
-long pypysig_occurred;
-static volatile long *pypysig_occurred_v = (volatile long *)&pypysig_occurred;
+struct pypysig_long_struct pypysig_occurred;
+static volatile long *pypysig_occurred_v = (volatile long *)&pypysig_occurred.value;
static volatile int pypysig_flags[NSIG];
void pypysig_ignore(int signum)
@@ -159,7 +162,7 @@
{
pypysig_flags[i] = 0;
/* maybe another signal is pending: */
- pypysig_occurred |= PENDING_SIGNAL_BIT;
+ pypysig_occurred.value |= PENDING_SIGNAL_BIT;
return i;
}
}
More information about the Pypy-commit
mailing list