X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2f531aa69f09fed380e2e212df5822874aab5e58..dc0b6bff49507332f7978675d174aa4fa9916fc2:/src/mc/mcer_ignore.cpp diff --git a/src/mc/mcer_ignore.cpp b/src/mc/mcer_ignore.cpp index 1ef7852a84..e78f482000 100644 --- a/src/mc/mcer_ignore.cpp +++ b/src/mc/mcer_ignore.cpp @@ -25,94 +25,3 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mcer_ignore, mc, "Logging specific to MC ignore mechanism"); } - -// ***** Ignore local variables - -static void mc_ignore_local_variable_in_scope(const char *var_name, - const char *subprogram_name, - simgrid::mc::Frame* subprogram, - simgrid::mc::Frame* scope); -static void MC_ignore_local_variable_in_object(const char *var_name, - const char *subprogram_name, - simgrid::mc::ObjectInformation* info); - -extern "C" -void MC_ignore_local_variable(const char *var_name, const char *frame_name) -{ - simgrid::mc::Process* process = &mc_model_checker->process(); - if (strcmp(frame_name, "*") == 0) - frame_name = NULL; - - for (std::shared_ptr const& info : process->object_infos) - MC_ignore_local_variable_in_object(var_name, frame_name, info.get()); -} - -static void MC_ignore_local_variable_in_object(const char *var_name, - const char *subprogram_name, - simgrid::mc::ObjectInformation* info) -{ - for (auto& entry : info->subprograms) - mc_ignore_local_variable_in_scope( - var_name, subprogram_name, &entry.second, &entry.second); -} - -/** \brief Ignore a local variable in a scope - * - * Ignore all instances of variables with a given name in - * any (possibly inlined) subprogram with a given namespaced - * name. - * - * \param var_name Name of the local variable (or parameter to ignore) - * \param subprogram_name Name of the subprogram fo ignore (NULL for any) - * \param subprogram (possibly inlined) Subprogram of the scope - * \param scope Current scope - */ -static void mc_ignore_local_variable_in_scope(const char *var_name, - const char *subprogram_name, - simgrid::mc::Frame* subprogram, - simgrid::mc::Frame* scope) -{ - // Processing of direct variables: - - // If the current subprogram matches the given name: - if (subprogram_name == nullptr || - (!subprogram->name.empty() - && subprogram->name == subprogram_name)) { - - // Try to find the variable and remove it: - int start = 0; - int end = scope->variables.size() - 1; - - // Dichotomic search: - while (start <= end) { - int cursor = (start + end) / 2; - simgrid::mc::Variable* current_var = &scope->variables[cursor]; - - int compare = current_var->name.compare(var_name); - if (compare == 0) { - // Variable found, remove it: - scope->variables.erase(scope->variables.begin() + cursor); - - // and start again: - start = 0; - end = scope->variables.size() - 1; - } else if (compare < 0) { - start = cursor + 1; - } else { - end = cursor - 1; - } - } - - } - // And recursive processing in nested scopes: - for (simgrid::mc::Frame& nested_scope : scope->scopes) { - // The new scope may be an inlined subroutine, in this case we want to use its - // namespaced name in recursive calls: - simgrid::mc::Frame* nested_subprogram = - nested_scope.tag == - DW_TAG_inlined_subroutine ? &nested_scope : subprogram; - - mc_ignore_local_variable_in_scope(var_name, subprogram_name, - nested_subprogram, &nested_scope); - } -} \ No newline at end of file