fixed implicit none, fixed analysis

This commit is contained in:
ALEXks
2024-07-20 13:03:27 +03:00
parent c59ca7ccb6
commit 5e0c79fc0c
7 changed files with 30 additions and 16 deletions

View File

@@ -432,7 +432,11 @@ static vector<OmpDir> findAllGlobalParallelRegions(SgStatement* stFunc)
&& dir.keys.find("end") == end) && dir.keys.find("end") == end)
{ {
if (sections.size() && sections.back().end == NULL) // has open parallel region if (sections.size() && sections.back().end == NULL) // has open parallel region
{
__spf_print(1, "wrong omp directives placed on line %d\n", st->lineNumber());
printInternalError(convertFileName(__FILE__).c_str(), __LINE__); printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
}
sections.push_back(dir); sections.push_back(dir);
sections.back().start = st; sections.back().start = st;
} }
@@ -440,6 +444,11 @@ static vector<OmpDir> findAllGlobalParallelRegions(SgStatement* stFunc)
&& dir.keys.find("do") == end && dir.keys.find("do") == end
&& dir.keys.find("end") != end) && dir.keys.find("end") != end)
{ {
if (!sections.size())
{
__spf_print(1, "wrong omp directives placed on line %d\n", st->lineNumber());
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
}
sections.back().end = st; sections.back().end = st;
} }
} }
@@ -514,7 +523,10 @@ void parseOmpDirectives(SgFile* file, vector<Messages>& currMessages)
{ {
SgForStmt* currSt = (SgForStmt*)st; SgForStmt* currSt = (SgForStmt*)st;
if (currSt->isEnddoLoop() == 0) if (currSt->isEnddoLoop() == 0)
{
__spf_print(1, "wrong omp directives placed\n");
printInternalError(convertFileName(__FILE__).c_str(), __LINE__); printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
}
else else
parseOmpInStatement(st, getGlobalPrivate(st, globalParallelRegions), true); parseOmpInStatement(st, getGlobalPrivate(st, globalParallelRegions), true);
} }

View File

@@ -318,7 +318,7 @@ bool checkRegionEntries(SgStatement *begin,
return noError; return noError;
} }
bool hasThisIds(SgStatement *start, set<int> &lines, const set<int> &IDs, const std::set<SgStatement*>* activeOps) bool hasThisIds(SgStatement *start, set<int> &lines, const set<int> &IDs, const set<SgStatement*>* activeOps)
{ {
bool has = false; bool has = false;
SgStatement *end = start->lastNodeOfStmt(); SgStatement *end = start->lastNodeOfStmt();
@@ -333,7 +333,8 @@ bool hasThisIds(SgStatement *start, set<int> &lines, const set<int> &IDs, const
if (var == ENTRY_STAT) if (var == ENTRY_STAT)
continue; continue;
if (activeOps && activeOps->size() && activeOps->find(curr) == activeOps->end()) if (activeOps && activeOps->size() && activeOps->find(curr) == activeOps->end() &&
isSgExecutableStatement(curr))
{ {
curr = curr->lastNodeOfStmt(); curr = curr->lastNodeOfStmt();
continue; continue;

View File

@@ -509,7 +509,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
bool res = EndDoLoopChecker(file, getObjectForFileFromMap(file_name, SPF_messages)); bool res = EndDoLoopChecker(file, getObjectForFileFromMap(file_name, SPF_messages));
verifyOK &= res; verifyOK &= res;
} }
else if (curr_regime == VERIFY_INCLUDE) else if (curr_regime == VERIFY_INCLUDES)
{ {
bool res = IncludeChecker(file, file_name, getObjectForFileFromMap(file_name, SPF_messages)); bool res = IncludeChecker(file, file_name, getObjectForFileFromMap(file_name, SPF_messages));
verifyOK &= res; verifyOK &= res;
@@ -1315,7 +1315,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
else if (curr_regime == EXTRACT_SHADOW_DIRS) else if (curr_regime == EXTRACT_SHADOW_DIRS)
commentsToInclude.clear(); commentsToInclude.clear();
else if (curr_regime == VERIFY_ENDDO || else if (curr_regime == VERIFY_ENDDO ||
curr_regime == VERIFY_INCLUDE || curr_regime == VERIFY_INCLUDES ||
curr_regime == VERIFY_DVM_DIRS || curr_regime == VERIFY_DVM_DIRS ||
curr_regime == VERIFY_EQUIVALENCE || curr_regime == VERIFY_EQUIVALENCE ||
curr_regime == VERIFY_COMMON || curr_regime == VERIFY_COMMON ||

View File

@@ -53,7 +53,7 @@ enum passes {
CODE_CHECKER_PASSES, CODE_CHECKER_PASSES,
VERIFY_ENDDO, VERIFY_ENDDO,
VERIFY_INCLUDE, VERIFY_INCLUDES,
VERIFY_EQUIVALENCE, VERIFY_EQUIVALENCE,
VERIFY_COMMON, VERIFY_COMMON,
VERIFY_FUNC_DECL, VERIFY_FUNC_DECL,
@@ -232,7 +232,7 @@ static void setPassValues()
passNames[CALL_GRAPH] = "CALL_GRAPH"; passNames[CALL_GRAPH] = "CALL_GRAPH";
passNames[LOOP_GRAPH] = "LOOP_GRAPH"; passNames[LOOP_GRAPH] = "LOOP_GRAPH";
passNames[VERIFY_ENDDO] = "VERIFY_ENDDO"; passNames[VERIFY_ENDDO] = "VERIFY_ENDDO";
passNames[VERIFY_INCLUDE] = "VERIFY_INCLUDE"; passNames[VERIFY_INCLUDES] = "VERIFY_INCLUDES";
passNames[VERIFY_EQUIVALENCE] = "VERIFY_EQUIVALENCE"; passNames[VERIFY_EQUIVALENCE] = "VERIFY_EQUIVALENCE";
passNames[VERIFY_COMMON] = "VERIFY_COMMON"; passNames[VERIFY_COMMON] = "VERIFY_COMMON";
passNames[VERIFY_OPERATORS] = "VERIFY_OPERATORS"; passNames[VERIFY_OPERATORS] = "VERIFY_OPERATORS";

View File

@@ -50,14 +50,15 @@ static void FindAllVars(SgExpression* expr, set<SgSymbol*>& allVars, set<SgSymbo
if (var == VAR_REF || var == ARRAY_REF || var == FUNC_CALL) if (var == VAR_REF || var == ARRAY_REF || var == FUNC_CALL)
{ {
auto s = expr->symbol(); auto s = expr->symbol();
const string ident(s->identifier());
if (var == FUNC_CALL /*(s->attributes() & EXTERNAL_BIT)*/) if (var == FUNC_CALL /*(s->attributes() & EXTERNAL_BIT)*/)
{ {
if (!IS_BY_USE(s) /* && s->scope() == scope*/) if (!IS_BY_USE(s) && ident.find("::") == string::npos /* && s->scope() == scope*/)
allVars.insert(s); allVars.insert(s);
} }
else else
{ {
if (!IS_BY_USE(s) && s->scope() == scope) if (!IS_BY_USE(s) && ident.find("::") == string::npos && s->scope() == scope)
allVars.insert(s); allVars.insert(s);
} }
} }
@@ -210,7 +211,7 @@ static map<char, SgType*> FunctionImplicitCheck(SgStatement* function, const map
break; break;
} }
set<int> skip = { EXTERN_STAT }; set<int> skip = { EXTERN_STAT, PRIVATE_STMT, PUBLIC_STMT };
set<SgSymbol*> allDataSymbols; set<SgSymbol*> allDataSymbols;
for (auto s = function->symbol()->next(); s; s = s->next()) for (auto s = function->symbol()->next(); s; s = s->next())

View File

@@ -223,11 +223,11 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
Pass(PRIVATE_ANALYSIS_IR) <= Pass(LOOP_ANALYZER_NODIST); Pass(PRIVATE_ANALYSIS_IR) <= Pass(LOOP_ANALYZER_NODIST);
Pass(CORRECT_VAR_DECL) <= list({ VERIFY_DVM_DIRS, VERIFY_OPERATORS, VERIFY_FORMAT, VERIFY_ENDDO, PREPROC_SPF, VERIFY_INCLUDE, PREPROC_ALLOCATES, CHECK_FUNC_TO_INCLUDE, FILL_PAR_REGIONS_LINES, CONVERT_ASSIGN_TO_LOOP, VERIFY_COMMON, VERIFY_EQUIVALENCE, PRINT_PAR_REGIONS_ERRORS }) <= Pass(CODE_CHECKER_PASSES); Pass(CORRECT_VAR_DECL) <= list({ VERIFY_DVM_DIRS, VERIFY_OPERATORS, VERIFY_FORMAT, VERIFY_ENDDO, PREPROC_SPF, VERIFY_INCLUDES, PREPROC_ALLOCATES, CHECK_FUNC_TO_INCLUDE, FILL_PAR_REGIONS_LINES, CONVERT_ASSIGN_TO_LOOP, VERIFY_COMMON, VERIFY_EQUIVALENCE, PRINT_PAR_REGIONS_ERRORS }) <= Pass(CODE_CHECKER_PASSES);
list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDE, PREPROC_SPF, PREPROC_ALLOCATES, GET_ALL_ARRAY_DECL, GCOV_PARSER }) <= list({ CALL_GRAPH, MACRO_EXPANSION, DEF_USE_STAGE1 }); list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDES, PREPROC_SPF, PREPROC_ALLOCATES, GET_ALL_ARRAY_DECL, GCOV_PARSER }) <= list({ CALL_GRAPH, MACRO_EXPANSION, DEF_USE_STAGE1 });
list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDE, PREPROC_ALLOCATES, FILL_PARALLEL_REG_IR }) <= list({ GET_ALL_ARRAY_DECL, FILL_COMMON_BLOCKS, PARSE_OMP_DIRS }) <= Pass(PREPROC_SPF); list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDES, PREPROC_ALLOCATES, FILL_PARALLEL_REG_IR }) <= list({ GET_ALL_ARRAY_DECL, FILL_COMMON_BLOCKS, PARSE_OMP_DIRS }) <= Pass(PREPROC_SPF);
Pass(CHECK_PAR_REG_DIR) <= Pass(FILL_PARALLEL_REG_IR); Pass(CHECK_PAR_REG_DIR) <= Pass(FILL_PARALLEL_REG_IR);
@@ -271,7 +271,7 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
Pass(REVERT_SUBST_EXPR_RD) <= list({ PURE_SAVE_TO_PARAMS, PURE_MODULE_TO_PARAMS, PURE_COMMON_TO_PARAMS, PURE_INTENT_INSERT }); Pass(REVERT_SUBST_EXPR_RD) <= list({ PURE_SAVE_TO_PARAMS, PURE_MODULE_TO_PARAMS, PURE_COMMON_TO_PARAMS, PURE_INTENT_INSERT });
list({ CORRECT_VAR_DECL, REVERT_SUBST_EXPR_RD, VERIFY_INCLUDE }) <= list({ CONVERT_TO_ENDDO, CORRECT_CODE_STYLE, REMOVE_DVM_DIRS, REMOVE_DVM_DIRS_TO_COMMENTS, REMOVE_DVM_INTERVALS }); list({ CORRECT_VAR_DECL, REVERT_SUBST_EXPR_RD, VERIFY_INCLUDES }) <= list({ CONVERT_TO_ENDDO, CORRECT_CODE_STYLE, REMOVE_DVM_DIRS, REMOVE_DVM_DIRS_TO_COMMENTS, REMOVE_DVM_INTERVALS });
list({ CALL_GRAPH2, CONVERT_LOOP_TO_ASSIGN, REVERT_SUBST_EXPR_RD, RESTORE_LOOP_FROM_ASSIGN }) <= Pass(INLINE_PROCEDURES); list({ CALL_GRAPH2, CONVERT_LOOP_TO_ASSIGN, REVERT_SUBST_EXPR_RD, RESTORE_LOOP_FROM_ASSIGN }) <= Pass(INLINE_PROCEDURES);
@@ -310,7 +310,7 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
list({ CALL_GRAPH2, REVERT_SUBST_EXPR_RD }) <= Pass(REMOVE_DEAD_CODE); list({ CALL_GRAPH2, REVERT_SUBST_EXPR_RD }) <= Pass(REMOVE_DEAD_CODE);
list({ REMOVE_DEAD_CODE, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= Pass(REMOVE_DEAD_CODE_AND_UNPARSE); list({ REMOVE_DEAD_CODE, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= Pass(REMOVE_DEAD_CODE_AND_UNPARSE);
Pass(CORRECT_VAR_DECL) <= Pass(SET_IMPLICIT_NONE); list({ VERIFY_INCLUDES, CORRECT_VAR_DECL }) <= Pass(SET_IMPLICIT_NONE);
passesIgnoreStateDone.insert({ CREATE_PARALLEL_DIRS, INSERT_PARALLEL_DIRS, INSERT_SHADOW_DIRS, EXTRACT_PARALLEL_DIRS, passesIgnoreStateDone.insert({ CREATE_PARALLEL_DIRS, INSERT_PARALLEL_DIRS, INSERT_SHADOW_DIRS, EXTRACT_PARALLEL_DIRS,
EXTRACT_SHADOW_DIRS, CREATE_REMOTES, UNPARSE_FILE, REMOVE_AND_CALC_SHADOW, EXTRACT_SHADOW_DIRS, CREATE_REMOTES, UNPARSE_FILE, REMOVE_AND_CALC_SHADOW,

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION_SPF "2355" #define VERSION_SPF "2358"