PandA-2024.02
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
CheckSystemType Class Reference

Class which system_flag to tree_node of variables and types when necessary. More...

#include <check_system_type.hpp>

Inheritance diagram for CheckSystemType:
Inheritance graph
[legend]
Collaboration diagram for CheckSystemType:
Collaboration graph
[legend]

Public Member Functions

 CheckSystemType (const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
 Constructor. More...
 
 ~CheckSystemType () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 Adds the system_flag to the tree_node's of variables and types when necessary. More...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. More...
 
- Public Member Functions inherited from FunctionFrontendFlowStep
 FunctionFrontendFlowStep (const application_managerRef AppM, const unsigned int function_id, const FrontendFlowStepType frontend_flow_step_type, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~FunctionFrontendFlowStep () override
 Destructor. More...
 
void ComputeRelationships (DesignFlowStepSet &relationship, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. More...
 
std::string GetSignature () const override
 Return the signature of this step. More...
 
std::string GetName () const override
 Return the name of this design step. More...
 
DesignFlowStep_Status Exec () final
 Execute the step. More...
 
unsigned int CGetBBVersion () const
 
unsigned int GetBitValueVersion () const
 
void PrintInitialIR () const override
 Dump the initial intermediate representation. More...
 
void PrintFinalIR () const override
 Dump the final intermediate representation. More...
 
- Public Member Functions inherited from FrontendFlowStep
 FrontendFlowStep (const application_managerRef AppM, const FrontendFlowStepType frontend_flow_step_type, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~FrontendFlowStep () override
 Destructor. More...
 
virtual std::string GetKindText () const
 Return the name of the type of this frontend flow step. More...
 
DesignFlowStepFactoryConstRef CGetDesignFlowStepFactory () const override
 Return the factory to create this type of steps. More...
 
void PrintTreeManager (const bool before) const
 Dump the tree manager. More...
 
- Public Member Functions inherited from DesignFlowStep
 DesignFlowStep (const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
virtual ~DesignFlowStep ()
 Destructor. More...
 
virtual void Initialize ()
 Initialize the step (i.e., like a constructor, but executed just before exec. More...
 
DesignFlowStep_Status GetStatus () const
 Return the status of this design step. More...
 
virtual void WriteDot (std::ostream &out) const
 Write the label for a dot graph. More...
 
bool IsComposed () const
 Returns if this step is composed. More...
 
int CGetDebugLevel () const
 Return the debug level of the step. More...
 

Private Member Functions

void recursive_examinate (const tree_nodeRef &tn, CustomUnorderedSet< unsigned int > &already_visited) const
 Examinate recursively the tree to detect system types and system variables. More...
 
void recursive_examinate (const tree_nodeRef &curr_tn, const unsigned int index, CustomUnorderedSet< unsigned int > &already_visited) const
 Examinate recursively the tree to detect system types and system variables. More...
 
bool is_system_include (std::string include) const
 Check if an header is a system header. More...
 
const CustomUnorderedSet< std::pair< FrontendFlowStepType, FunctionRelationship > > ComputeFrontendRelationships (const DesignFlowStep::RelationshipType relationship_type) const override
 Return the set of analyses in relationship with this design step. More...
 

Static Private Member Functions

static void build_include_structures (ParameterConstRef parameters)
 Build the include map, the function rename map and library system sets. More...
 
static std::string getRealInclName (const std::string &include)
 Given the string stored in a srcp of the raw return the correct include name. More...
 

Private Attributes

const BehavioralHelperConstRef behavioral_helper
 The helper associated with the current function. More...
 
const tree_managerRef TM
 The tree manager. More...
 
bool already_executed
 Already executed. More...
 

Static Private Attributes

static std::vector< std::string > systemIncPath
 Contains the list of the folders containing the system header files. More...
 
static const CustomUnorderedMap< std::string, std::string > inclNameToPath
 Associates to each system header file its full path. More...
 
static const CustomUnorderedMap< std::string, std::string > rename_function
 Associates a function to its original name. More...
 
static const CustomUnorderedMap< std::string, std::string > rename_types
 Associates a type to its original name. More...
 
static const CustomUnorderedSet< std::string > library_system_functions
 The set of functions which have to be considered library_system. More...
 
static const CustomUnorderedSet< std::string > library_system_includes = {{"math.h"}}
 The set of headers which contains function which have to be considered library_system. More...
 
static const CustomUnorderedMap< std::string, std::string > undefined_library_function_include
 Map undefined library function to corresponding header. More...
 

Additional Inherited Members

- Public Types inherited from FrontendFlowStep
using FunctionRelationship = enum { ALL_FUNCTIONS, CALLED_FUNCTIONS, CALLING_FUNCTIONS, SAME_FUNCTION, WHOLE_APPLICATION }
 The different relationship type between function analysis. More...
 
- Public Types inherited from DesignFlowStep
enum  RelationshipType { DEPENDENCE_RELATIONSHIP, INVALIDATION_RELATIONSHIP, PRECEDENCE_RELATIONSHIP }
 The relationship type. More...
 
- Static Public Member Functions inherited from FunctionFrontendFlowStep
static const std::string ComputeSignature (const FrontendFlowStepType frontend_flow_step_type, const unsigned int function_id)
 Compute the signature of a function frontend flow step. More...
 
- Static Public Member Functions inherited from FrontendFlowStep
static void CreateSteps (const DesignFlowManagerConstRef design_flow_manager, const CustomUnorderedSet< std::pair< FrontendFlowStepType, FunctionRelationship >> &frontend_relationships, const application_managerConstRef application_manager, DesignFlowStepSet &relationships)
 Create the relationship steps of a step with other steps starting from already specified dependencies between frontend flow steps. More...
 
static const std::string EnumToKindText (const FrontendFlowStepType frontend_flow_step_type)
 Given a frontend flow step type, return the name of the type. More...
 
- Protected Member Functions inherited from FunctionFrontendFlowStep
void WriteBBGraphDot (const std::string &filename) const
 Write the current version of statement list in dot format. More...
 
- Protected Attributes inherited from FunctionFrontendFlowStep
const FunctionBehaviorRef function_behavior
 The function behavior of the function to be analyzed. More...
 
const unsigned int function_id
 The index of the function to be analyzed. More...
 
unsigned int bb_version
 The version of the basic block intermediate representation on which this step has been applied. More...
 
unsigned int bitvalue_version
 The version of the bitvalue information on which this step has been applied. More...
 
- Protected Attributes inherited from FrontendFlowStep
const application_managerRef AppM
 The application manager. More...
 
const FrontendFlowStepType frontend_flow_step_type
 The type of this step. More...
 
unsigned int print_counter
 Print counter. More...
 
- Protected Attributes inherited from DesignFlowStep
bool composed
 True if this step represents a composition of design flow steps (e.g., a flow); must be set by specialized constructors. More...
 
const Wrefcount< const DesignFlowManagerdesign_flow_manager
 The design flow manager. More...
 
const ParameterConstRef parameters
 Set of input parameters. More...
 
int debug_level
 The debug level. More...
 
const int output_level
 The output level. More...
 

Detailed Description

Class which system_flag to tree_node of variables and types when necessary.

Definition at line 62 of file check_system_type.hpp.

Constructor & Destructor Documentation

◆ CheckSystemType()

CheckSystemType::CheckSystemType ( const ParameterConstRef  _parameters,
const application_managerRef  AppM,
unsigned int  function_id,
const DesignFlowManagerConstRef  design_flow_manager 
)

Constructor.

Parameters
Paramis the set of the parameters
AppMis the application manager
function_idis the index of the function
design_flow_manageris the design flow manager

Definition at line 143 of file check_system_type.cpp.

References build_include_structures(), DesignFlowStep::debug_level, DEBUG_LEVEL_NONE, GET_CLASS, DesignFlowStep::parameters, systemIncPath, and ~CheckSystemType().

Here is the call graph for this function:

◆ ~CheckSystemType()

CheckSystemType::~CheckSystemType ( )
overridedefault

Destructor.

Referenced by CheckSystemType().

Here is the caller graph for this function:

Member Function Documentation

◆ build_include_structures()

void CheckSystemType::build_include_structures ( ParameterConstRef  parameters)
staticprivate

Build the include map, the function rename map and library system sets.

replace z:/mingw at the beginning of the string

Definition at line 934 of file check_system_type.cpp.

References CT_NO_COMPILER, FILENAME_NORM, O0, starts_with(), and systemIncPath.

Referenced by CheckSystemType().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > CheckSystemType::ComputeFrontendRelationships ( const DesignFlowStep::RelationshipType  relationship_type) const
overrideprivatevirtual

Return the set of analyses in relationship with this design step.

Parameters
relationship_typeis the type of relationship to be considered

Implements FrontendFlowStep.

Definition at line 160 of file check_system_type.cpp.

References DesignFlowStep::DEPENDENCE_RELATIONSHIP, DesignFlowStep::INVALIDATION_RELATIONSHIP, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SAME_FUNCTION, and THROW_UNREACHABLE.

◆ getRealInclName()

std::string CheckSystemType::getRealInclName ( const std::string &  include)
staticprivate

Given the string stored in a srcp of the raw return the correct include name.

Parameters
includeis the string of srcp to be checked
Returns
std::string is the string fixed

Definition at line 994 of file check_system_type.cpp.

References FILENAME_NORM, inclNameToPath, starts_with(), and systemIncPath.

Referenced by recursive_examinate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasToBeExecuted()

bool CheckSystemType::HasToBeExecuted ( ) const
overridevirtual

Check if this step has actually to be executed.

Returns
true if the step has to be executed

Reimplemented from FunctionFrontendFlowStep.

Definition at line 187 of file check_system_type.cpp.

References already_executed.

◆ InternalExec()

DesignFlowStep_Status CheckSystemType::InternalExec ( )
overridevirtual

Adds the system_flag to the tree_node's of variables and types when necessary.

Returns
the exit status of this step

Implements FunctionFrontendFlowStep.

Definition at line 192 of file check_system_type.cpp.

References already_executed, FrontendFlowStep::AppM, FunctionFrontendFlowStep::function_id, GET_NODE, recursive_examinate(), sl, SUCCESS, and TM.

Here is the call graph for this function:

◆ is_system_include()

bool CheckSystemType::is_system_include ( std::string  include) const
private

Check if an header is a system header.

Parameters
includeis the header file

Definition at line 915 of file check_system_type.cpp.

References DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, FILENAME_NORM, INDENT_DBG_MEX, and systemIncPath.

Referenced by recursive_examinate().

Here is the caller graph for this function:

◆ recursive_examinate() [1/2]

void CheckSystemType::recursive_examinate ( const tree_nodeRef tn,
CustomUnorderedSet< unsigned int > &  already_visited 
) const
private

Examinate recursively the tree to detect system types and system variables.

Parameters
tnis the root of the subtree to be examinated; it must be a tree_reindex

Definition at line 222 of file check_system_type.cpp.

References GET_INDEX_NODE, tree_node::get_kind(), GET_NODE, and THROW_ASSERT.

Referenced by InternalExec(), and recursive_examinate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ recursive_examinate() [2/2]

void CheckSystemType::recursive_examinate ( const tree_nodeRef curr_tn,
const unsigned int  index,
CustomUnorderedSet< unsigned int > &  already_visited 
) const
private

Field Documentation

◆ already_executed

bool CheckSystemType::already_executed
private

Already executed.

Definition at line 93 of file check_system_type.hpp.

Referenced by HasToBeExecuted(), and InternalExec().

◆ behavioral_helper

const BehavioralHelperConstRef CheckSystemType::behavioral_helper
private

The helper associated with the current function.

Definition at line 66 of file check_system_type.hpp.

Referenced by recursive_examinate().

◆ inclNameToPath

const CustomUnorderedMap< std::string, std::string > CheckSystemType::inclNameToPath
staticprivate

Associates to each system header file its full path.

Definition at line 75 of file check_system_type.hpp.

Referenced by getRealInclName().

◆ library_system_functions

const CustomUnorderedSet< std::string > CheckSystemType::library_system_functions
staticprivate
Initial value:
= {
{"__errno_location", "exit", "abort"},
}

The set of functions which have to be considered library_system.

Definition at line 84 of file check_system_type.hpp.

Referenced by recursive_examinate().

◆ library_system_includes

const CustomUnorderedSet< std::string > CheckSystemType::library_system_includes = {{"math.h"}}
staticprivate

The set of headers which contains function which have to be considered library_system.

Definition at line 87 of file check_system_type.hpp.

Referenced by recursive_examinate().

◆ rename_function

const CustomUnorderedMap< std::string, std::string > CheckSystemType::rename_function
staticprivate
Initial value:
= {{"_IO_putc", "putc"},
{"_IO_getc", "getc"}}

Associates a function to its original name.

Definition at line 78 of file check_system_type.hpp.

Referenced by recursive_examinate().

◆ rename_types

const CustomUnorderedMap< std::string, std::string > CheckSystemType::rename_types
staticprivate
Initial value:
= {{"__time_t", "long int"},
{"__suseconds_t", "long int"}}

Associates a type to its original name.

Definition at line 81 of file check_system_type.hpp.

Referenced by recursive_examinate().

◆ systemIncPath

std::vector< std::string > CheckSystemType::systemIncPath
staticprivate

Contains the list of the folders containing the system header files.

Definition at line 72 of file check_system_type.hpp.

Referenced by build_include_structures(), CheckSystemType(), getRealInclName(), and is_system_include().

◆ TM

const tree_managerRef CheckSystemType::TM
private

The tree manager.

Definition at line 69 of file check_system_type.hpp.

Referenced by InternalExec(), and recursive_examinate().

◆ undefined_library_function_include

const CustomUnorderedMap< std::string, std::string > CheckSystemType::undefined_library_function_include
staticprivate
Initial value:
= {
{"atof", "stdlib.h"}, {"atoi", "stdlib.h"}, {"srand48", "stdlib.h"},
{"va_start", "stdarg.h"}, {"va_end", "stdarg.h"}, {"lgamma", "math.h"},
{"lgammaf", "math.h"}, {"lgamma_r", "math.h"}, {"lgammaf_r", "math.h"}}

Map undefined library function to corresponding header.

Definition at line 90 of file check_system_type.hpp.

Referenced by recursive_examinate().


The documentation for this class was generated from the following files:

Generated on Mon Feb 12 2024 13:03:47 for PandA-2024.02 by doxygen 1.8.13