From: weiyu Date: Fri, 12 Jul 2019 20:30:36 +0000 (-0700) Subject: fix a bug in cds_func_exit X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f9dade8fdfb62d62d14606268e3f7e5b692e15e6;p=c11tester.git fix a bug in cds_func_exit --- diff --git a/cmodelint.cc b/cmodelint.cc index 734a9542..82bf974f 100644 --- a/cmodelint.cc +++ b/cmodelint.cc @@ -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()); } diff --git a/history.cc b/history.cc index 4ddba7b5..caf86ced 100644 --- a/history.cc +++ b/history.cc @@ -46,6 +46,7 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid) func_inst_lists->push_back( new func_inst_list_t() ); } +/* @param func_id a non-zero value */ void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid) { uint32_t id = id_to_int(tid);