diff --git a/sapfor/experts/Sapfor_2017/_src/Inliner/inliner.cpp b/sapfor/experts/Sapfor_2017/_src/Inliner/inliner.cpp index c97531c..af8ea9d 100644 --- a/sapfor/experts/Sapfor_2017/_src/Inliner/inliner.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Inliner/inliner.cpp @@ -2287,6 +2287,7 @@ static void createDeclarations(const map>& newSymbs for (auto& elem : sortConstRefs(constRefs)) param->addConstant(elem); + param->setlineNumber(place->lineNumber()); place->insertStmtBefore(*param, *scope); } @@ -2356,8 +2357,13 @@ static void createDeclarations(const map>& newSymbs } if (newCommons.size()) + { for (auto& elem : newCommons) + { + elem->setlineNumber(place->lineNumber()); place->insertStmtBefore(*elem, *scope); + } + } //insert SAVE if (saveRefs.size()) @@ -2367,6 +2373,8 @@ static void createDeclarations(const map>& newSymbs for (auto& s : saveRefs) refs.push_back(new SgVarRefExp(s.second)); save->setExpression(0, makeExprList(refs)); + + save->setlineNumber(place->lineNumber()); place->insertStmtBefore(*save, *scope); } @@ -2389,18 +2397,21 @@ static void createDeclarations(const map>& newSymbs strcpy(value->thellnd->entry.string_val, dataS.c_str()); decl->setExpression(0, value); + decl->setlineNumber(place->lineNumber()); place->insertStmtBefore(*decl, *scope); } //insert ALLOCATABLE if (allocatable.size()) { - SgStatement* save = new SgStatement(ALLOCATABLE_STMT); + SgStatement* alloc_stat = new SgStatement(ALLOCATABLE_STMT); vector refs; for (auto& s : allocatable) refs.push_back(new SgVarRefExp(s)); - save->setExpression(0, makeExprList(refs)); - place->insertStmtBefore(*save, *scope); + alloc_stat->setExpression(0, makeExprList(refs)); + + alloc_stat->setlineNumber(place->lineNumber()); + place->insertStmtBefore(*alloc_stat, *scope); } } } diff --git a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp index fabdc4b..1063efb 100644 --- a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp @@ -518,7 +518,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne { bool res = DvmDirectiveChecker(file, dvmDirErrors, keepDvmDirectives, ignoreDvmChecker); verifyOK &= res; - if (dvmDirErrors.size() != 0 && ignoreDvmChecker == 0) + if (dvmDirErrors.size() && ignoreDvmChecker == 0) printDvmActiveDirsErrors(); } else if (curr_regime == VERIFY_EQUIVALENCE) @@ -991,7 +991,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne else if (curr_regime == CONVERT_TO_C) covertToC(file); else if (curr_regime == SET_IMPLICIT_NONE) - implicitCheck(file); + implicitCheck(file, getObjectForFileFromMap(file_name, dvmDirErrors)); else if (curr_regime == INSERT_NO_DISTR_FLAGS_FROM_GUI) addPrivatesToArraysFromGUI(file, declaredArrays, distrStateFromGUI); else if (curr_regime == REMOVE_DEAD_CODE) @@ -1511,6 +1511,18 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne printParalleRegions("_parallelRegions.txt", parallelRegions); } } + if (curr_regime == SET_IMPLICIT_NONE) + { + size_t total_s = 0; + for (auto& err : dvmDirErrors) + total_s += err.second.size(); + + if (total_s && ignoreDvmChecker == 0) + { + printDvmActiveDirsErrors(); + throw(-1); + } + } else if (curr_regime == FILL_PAR_REGIONS) { fillRegionIntervals(parallelRegions); diff --git a/sapfor/experts/Sapfor_2017/_src/SapforData.h b/sapfor/experts/Sapfor_2017/_src/SapforData.h index d3df28c..6e97b67 100644 --- a/sapfor/experts/Sapfor_2017/_src/SapforData.h +++ b/sapfor/experts/Sapfor_2017/_src/SapforData.h @@ -106,7 +106,7 @@ std::map commonBlocks; // name -> commonBlock std::map> SPF_messages; //file ->messages -//for PARALLEL REGIONS + DVM_CHECKER +//for PARALLEL REGIONS + DVM_CHECKER + SET_IMPLICIT_NONE std::map> dvmDirErrors; // file->lines // diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/function_purifying.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/function_purifying.cpp index 85384c7..c338c1a 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/function_purifying.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/function_purifying.cpp @@ -92,6 +92,7 @@ void insertIntrinsicStat(const vector& allFuncInfo) SgStatement* intr = new SgStatement(INTRIN_STAT); intr->setExpression(0, makeExprList(list)); + intr->setlineNumber(st->lineNumber()); st->insertStmtBefore(*intr, *func->funcPointer); } diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp index 84300a0..60e4c80 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp @@ -164,7 +164,8 @@ static vector getVars(const set& functionSymbs, set FunctionImplicitCheck(SgStatement* function, const map>& typesByFunctions) +static map FunctionImplicitCheck(SgStatement* function, const map>& typesByFunctions, + vector& dvmDirErrorsLines) { set allVars, allVarsConst; map types; @@ -238,6 +239,9 @@ static map FunctionImplicitCheck(SgStatement* function, const map if (skip.count(st->variant())) continue; + if (isDVM_stat(st)) + dvmDirErrorsLines.push_back(st->lineNumber()); + if (isDVM_stat(st) || isSPF_stat(st)) continue; @@ -354,7 +358,7 @@ static map FunctionImplicitCheck(SgStatement* function, const map return types; } -void implicitCheck(SgFile* file) +void implicitCheck(SgFile* file, vector& dvmDirErrorsLines) { map> typesByFunctions; @@ -364,7 +368,7 @@ void implicitCheck(SgFile* file) for (int func = 0; func < modulesAndFunctions.size(); ++func) { SgStatement* function = modulesAndFunctions[func]; - typesByFunctions[function] = FunctionImplicitCheck(function, typesByFunctions); + typesByFunctions[function] = FunctionImplicitCheck(function, typesByFunctions, dvmDirErrorsLines); } typesByFunctions.clear(); diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.h b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.h index 03e600c..3c05a8f 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.h +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.h @@ -1,3 +1,5 @@ #pragma once -void implicitCheck(SgFile* file); \ No newline at end of file +#include + +void implicitCheck(SgFile* file, std::vector& dvmDirErrorsLines); \ No newline at end of file diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h b/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h index 82cb2cf..2e4d878 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h @@ -223,15 +223,15 @@ void InitPassesDependencies(map> &passDepsIn, set Pass(PRIVATE_ANALYSIS_IR) <= Pass(LOOP_ANALYZER_NODIST); - Pass(CORRECT_VAR_DECL) <= list({ VERIFY_DVM_DIRS, PREPROC_SPF, VERIFY_ENDDO, VERIFY_INCLUDE, PREPROC_ALLOCATES, CHECK_FUNC_TO_INCLUDE, FILL_PAR_REGIONS_LINES, CONVERT_ASSIGN_TO_LOOP, VERIFY_COMMON, VERIFY_EQUIVALENCE, PRINT_PAR_REGIONS_ERRORS, VERIFY_OPERATORS, VERIFY_FORMAT }) <= Pass(CODE_CHECKER_PASSES); + 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); - list({ 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_INCLUDE, PREPROC_SPF, PREPROC_ALLOCATES, GET_ALL_ARRAY_DECL, GCOV_PARSER }) <= list({ CALL_GRAPH, MACRO_EXPANSION, DEF_USE_STAGE1 }); - list({ 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_INCLUDE, 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); - list({ GET_ALL_ARRAY_DECL, CALL_GRAPH2, CODE_CHECKER_PASSES, SUBST_EXPR_RD, ARRAY_ACCESS_ANALYSIS_FOR_CORNER }) <= list({ LOOP_ANALYZER_NODIST, LOOP_ANALYZER_DATA_DIST_S0, LOOP_ANALYZER_DATA_DIST_S1, ONLY_ARRAY_GRAPH }); + list({ CODE_CHECKER_PASSES, GET_ALL_ARRAY_DECL, CALL_GRAPH2, SUBST_EXPR_RD, ARRAY_ACCESS_ANALYSIS_FOR_CORNER }) <= list({ LOOP_ANALYZER_NODIST, LOOP_ANALYZER_DATA_DIST_S0, LOOP_ANALYZER_DATA_DIST_S1, ONLY_ARRAY_GRAPH }); list({ LOOP_ANALYZER_NODIST, REMOVE_OMP_DIRS }) <= Pass(INSERT_PARALLEL_DIRS_NODIST); @@ -239,7 +239,7 @@ void InitPassesDependencies(map> &passDepsIn, set Pass(LOOP_ANALYZER_DATA_DIST_S0) <= Pass(LOOP_ANALYZER_DATA_DIST_S1) <= Pass(LOOP_ANALYZER_DATA_DIST_S2) <= Pass(CREATE_TEMPLATE_LINKS) <= Pass(LOOP_ANALYZER_COMP_DIST); - list({ VERIFY_ENDDO, VERIFY_FORMAT, SUBST_EXPR_RD, CONVERT_ASSIGN_TO_LOOP }) <= Pass(LOOP_GRAPH) <= Pass(CALL_GRAPH) <= Pass(CALL_GRAPH2); + list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_FORMAT, SUBST_EXPR_RD, CONVERT_ASSIGN_TO_LOOP }) <= Pass(LOOP_GRAPH) <= Pass(CALL_GRAPH) <= Pass(CALL_GRAPH2); Pass(MACRO_EXPANSION) <= Pass(CALL_GRAPH); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/SgUtils.cpp b/sapfor/experts/Sapfor_2017/_src/Utils/SgUtils.cpp index f0e217a..b8949cb 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/SgUtils.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Utils/SgUtils.cpp @@ -2724,7 +2724,7 @@ SgStatement* makeDeclaration(SgStatement* curr, const vector& sIn, ve decl->setFileName(place->fileName()); decl->setFileId(place->getFileId()); decl->setProject(place->getProject()); - decl->setlineNumber(getNextNegativeLineNumber()); + decl->setlineNumber(place->lineNumber()); place->insertStmtBefore(*decl, *scope); } diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/utils.cpp b/sapfor/experts/Sapfor_2017/_src/Utils/utils.cpp index 76fec47..d50b765 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/utils.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Utils/utils.cpp @@ -1190,6 +1190,7 @@ objT& getObjectForFileFromMap(const char *fileName, map &mapObject return it->second; } +template vector& getObjectForFileFromMap(const char* fileName, map>&); template vector& getObjectForFileFromMap(const char *fileName, map>&); template vector& getObjectForFileFromMap(const char *fileName, map>&); template vector& getObjectForFileFromMap(const char *fileName, map>&); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/version.h b/sapfor/experts/Sapfor_2017/_src/Utils/version.h index 93f5303..0039fac 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/version.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2352" +#define VERSION_SPF "2355"