move the 'link_insts' method to FuncNode class
[c11tester.git] / cmodelint.cc
index f71c0f7e9904f8e8d8d91918a4b14cfac94c9745..82bf974f03b99b7aaae1ecd7b4fd440ed05f104f 100644 (file)
@@ -369,12 +369,12 @@ void cds_func_entry(const char * funcName) {
 
        ModelHistory *history = model->get_history();
        if ( !history->getFuncMap()->contains(funcName) ) {
-               /* add func id to func map */
+               // add func id to func map
                func_id = history->get_func_counter();
                history->incr_func_counter();
                history->getFuncMap()->put(funcName, func_id);
 
-               /* add func id to reverse func map */
+               // add func id to reverse func map
                ModelVector<const char *> * func_map_rev = history->getFuncMapRev();
                if ( func_map_rev->size() <= func_id )
                        func_map_rev->resize( func_id + 1 );
@@ -395,5 +395,12 @@ void cds_func_exit(const char * funcName) {
        ModelHistory *history = model->get_history();
        func_id = history->getFuncMap()->get(funcName);
 
+       /* func_id not found; this could happen in the case where a function calls cds_func_entry
+       * when the model has been defined yet, but then an atomic inside the function initializes 
+       * the model. And then cds_func_exit is called upon the function exiting. 
+       */
+       if (func_id == 0)
+               return;
+
        history->exit_function(func_id, th->get_id());
 }