From 0b6a915753a341d4db0322025d6c72474071c88a Mon Sep 17 00:00:00 2001 From: ALEXks Date: Mon, 13 May 2024 10:37:59 +0300 Subject: [PATCH] fixed implicit none and imterfaces insertion --- .../_src/DvmhRegions/DvmhRegionInserter.cpp | 10 +++++---- .../Transformations/set_implicit_none.cpp | 22 ++++++++++++++++--- .../experts/Sapfor_2017/_src/Utils/version.h | 2 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/DvmhRegions/DvmhRegionInserter.cpp b/sapfor/experts/Sapfor_2017/_src/DvmhRegions/DvmhRegionInserter.cpp index a7fc2b1..a76a193 100644 --- a/sapfor/experts/Sapfor_2017/_src/DvmhRegions/DvmhRegionInserter.cpp +++ b/sapfor/experts/Sapfor_2017/_src/DvmhRegions/DvmhRegionInserter.cpp @@ -960,10 +960,12 @@ static string getInterfaceBlock(SgStatement* func, const FuncParam& pars) st = copy->lexNext(); while (st != last) { - if (st->variant() == VAR_DECL - || st->variant() == VAR_DECL_90 - || st->variant() == DIM_STAT - || st->variant() == INTENT_STMT) + const int var = st->variant(); + if (var == VAR_DECL + || var == VAR_DECL_90 + || var == DIM_STAT + || var == INTENT_STMT + || var == EXTERN_STAT) { bool empty = filterFromList(st, idents); if (empty) 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 2be3c33..b4c537c 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp @@ -37,8 +37,12 @@ static void FindAllVars(SgExpression* expr, set& allVars, setvariant(); if (var == VAR_REF || var == ARRAY_REF || var == FUNC_CALL) - allVars.insert(expr->symbol()); - if (var == CONST_REF) + { + auto s = expr->symbol(); + if ((s->attributes() & EXTERNAL_BIT) == 0) + allVars.insert(s); + } + else if (var == CONST_REF) allVarsConst.insert(expr->symbol()); FindAllVars(expr->lhs(), allVars, allVarsConst); @@ -183,7 +187,7 @@ static map FunctionImplicitCheck(SgStatement* function, const map set skip = { EXTERN_STAT }; - for (auto st = function; st != endOfFunc && st->variant() != CONTAINS_STMT; st = st->lexNext()) + for (auto st = function->lexNext(); st != endOfFunc && st->variant() != CONTAINS_STMT; st = st->lexNext()) { if (skip.count(st->variant())) continue; @@ -195,6 +199,18 @@ static map FunctionImplicitCheck(SgStatement* function, const map allVars.insert(isSgForStmt(st)->doName()); } + //add parameters + auto prog = isSgProgHedrStmt(function); + if (prog) + { + for (int z = 0; z < prog->numberOfParameters(); ++z) + { + auto s = prog->parameter(z); + if ((s->attributes() & EXTERNAL_BIT) == 0) + allVars.insert(s); + } + } + varsWithoutDecl = getVars(function->symbol()->identifier(), toRename, allVars, types); varsWithoutDeclConst = getVars(function->symbol()->identifier(), toRename, allVarsConst, types); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/version.h b/sapfor/experts/Sapfor_2017/_src/Utils/version.h index 5ecc2e3..c333220 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 "2333" +#define VERSION_SPF "2334"