@@ -254,7 +254,20 @@ class PyGccSimpleIpaPass : public simple_ipa_opt_pass
254
254
opt_pass * clone () {return this ; }
255
255
};
256
256
257
- #endif /* #if (GCC_VERSION >= 4009) */
257
+ #else /* #if (GCC_VERSION >= 4009) */
258
+ /*
259
+ Before GCC 4.9, passes were implemented using callback functions.
260
+ */
261
+ static bool gate_cb (void )
262
+ {
263
+ return impl_gate (cfun );
264
+ }
265
+
266
+ static unsigned int execute_cb (void )
267
+ {
268
+ return impl_execute (cfun );
269
+ }
270
+ #endif /* #else clause of if (GCC_VERSION >= 4009) */
258
271
259
272
static int
260
273
do_pass_init (PyObject * s , PyObject * args , PyObject * kwargs ,
@@ -303,7 +316,7 @@ do_pass_init(PyObject *s, PyObject *args, PyObject *kwargs,
303
316
default :
304
317
gcc_unreachable ();
305
318
}
306
- #else
319
+ #else /* #if (GCC_VERSION >= 4009) */
307
320
pass = (struct opt_pass * )PyMem_Malloc (sizeof_pass );
308
321
if (!pass ) {
309
322
return -1 ;
@@ -321,9 +334,9 @@ do_pass_init(PyObject *s, PyObject *args, PyObject *kwargs,
321
334
return -1 ;
322
335
}
323
336
324
- pass -> gate = impl_gate ;
325
- pass -> execute = impl_execute ;
326
- #endif
337
+ pass -> gate = gate_cb ;
338
+ pass -> execute = execute_cb ;
339
+ #endif /* ending the #else clause of #if (GCC_VERSION >= 4009) */
327
340
328
341
if (PyGcc_insert_new_wrapper_into_cache (& pass_wrapper_cache ,
329
342
pass ,
0 commit comments