Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use function-like macros instead of inline functions for MC_is_active().
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 17 Oct 2012 08:37:06 +0000 (10:37 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 17 Oct 2012 09:43:01 +0000 (11:43 +0200)
When using functions, Gcc apparently does not remove dead branches when
building without optimizations, and then complains at link time with:

Linking C executable ../../bin/gras_stub_generator
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_ignore'
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_do_the_modelcheck_for_real'
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_process_clock_get'
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_process_clock_add'
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_memory_init'
../../lib/libsimgrid.so.3.8: error: undefined reference to 'MC_new_stack_area'
collect2: error: ld returned 1 exit status

This is if course when building with -Denable_model-checking=OFF.

include/simgrid/modelchecker.h

index 65d437a..52b2ed7 100644 (file)
@@ -16,9 +16,7 @@
 
 extern int _surf_do_model_check; /* please don't use directly: we inline MC_is_active, but that's what you should use */
 
-static int MC_is_active(void) {
-  return _surf_do_model_check;
-}
+#define MC_is_active() _surf_do_model_check
 
 XBT_PUBLIC(void) MC_assert(int);
 XBT_PUBLIC(int) MC_random(int min, int max);
@@ -27,10 +25,7 @@ XBT_PUBLIC(void) MC_automaton_new_propositional_symbol(const char* id, void* fct
 #else
 
 #define MC_assert(a) xbt_assert(a)
-
-static int MC_is_active(void) {
-  return 0;
-}
+#define MC_is_active() 0
 
 #endif