From e3d77f51f16ebf40c5214bea5affd3e8faad5a20 Mon Sep 17 00:00:00 2001 From: ALEXks Date: Sun, 11 May 2025 09:17:16 +0300 Subject: [PATCH] fixed getNameInLocation --- src/Distribution/DvmhDirective.cpp | 15 +++------------ src/Utils/module_utils.cpp | 26 +++++++++++++++++++++++--- src/Utils/module_utils.h | 1 + src/Utils/version.h | 2 +- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/Distribution/DvmhDirective.cpp b/src/Distribution/DvmhDirective.cpp index 798eef2..1f8f0d2 100644 --- a/src/Distribution/DvmhDirective.cpp +++ b/src/Distribution/DvmhDirective.cpp @@ -199,15 +199,6 @@ static set fillUsedSymbols(SgStatement *loop) return usedS; } -static string correctSymbolModuleName(const string& origFull) -{ - auto it = origFull.find("::"); - if (it == string::npos) - return origFull; - else - return origFull.substr(it + 2); -} - static SgStatement* getModuleScope(const string& origFull, vector& moduleList, SgStatement *local) { auto it = origFull.find("::"); @@ -959,7 +950,7 @@ ParallelDirective::genDirective(File* file, const vectorsymbol()->identifier()); + redS = getNameInLocation(parentFunc, red, getModuleScope(red, moduleList, parentFunc)->symbol()->identifier()); else redS = findSymbolOrCreate(file, clearName, NULL, parentFunc); @@ -1017,12 +1008,12 @@ ParallelDirective::genDirective(File* file, const vector(list)); if (clearName1 != get<0>(list)) - redS1 = getNameInLocation(parentFunc, clearName1, getModuleScope(get<0>(list), moduleList, parentFunc)->symbol()->identifier()); + redS1 = getNameInLocation(parentFunc, get<0>(list), getModuleScope(get<0>(list), moduleList, parentFunc)->symbol()->identifier()); else redS1 = findSymbolOrCreate(file, clearName1, NULL, parentFunc); if (clearName2 != get<1>(list)) - redS2 = getNameInLocation(parentFunc, clearName2, getModuleScope(get<1>(list), moduleList, parentFunc)->symbol()->identifier()); + redS2 = getNameInLocation(parentFunc, get<1>(list), getModuleScope(get<1>(list), moduleList, parentFunc)->symbol()->identifier()); else redS2 = findSymbolOrCreate(file, clearName2, NULL, parentFunc); diff --git a/src/Utils/module_utils.cpp b/src/Utils/module_utils.cpp index 055e658..9bc9e1a 100644 --- a/src/Utils/module_utils.cpp +++ b/src/Utils/module_utils.cpp @@ -343,9 +343,9 @@ const set& getModuleSymbols(SgStatement *func) return symbs; } -SgSymbol* getNameInLocation(SgStatement* func, const string& varName, const string& locName) +static void findSymbol(SgStatement* func, const string& varName, const string& locName, + map& altNames) { - map altNames; for (const auto& s : getModuleSymbols(func)) { SgSymbol* orig = OriginalSymbol(s); @@ -353,11 +353,22 @@ SgSymbol* getNameInLocation(SgStatement* func, const string& varName, const stri if (orig->identifier() == varName && orig->scope()->symbol()->identifier() == locName) altNames[s->identifier()] = s; } +} + +SgSymbol* getNameInLocation(SgStatement* func, const string& varName, const string& locName) +{ + const string clearName = correctSymbolModuleName(varName); + + map altNames; + findSymbol(func, varName, locName, altNames); + + if (altNames.size() == 0 && clearName != varName) + findSymbol(func, clearName, locName, altNames); if (altNames.size() > 0) return altNames.begin()->second; else { - __spf_print(1, "%s %s %s\n", func->symbol()->identifier(), varName.c_str(), locName.c_str()); + __spf_print(1, "%s (%s %s) %s\n", func->symbol()->identifier(), clearName.c_str(), varName.c_str(), locName.c_str()); printInternalError(convertFileName(__FILE__).c_str(), __LINE__); } @@ -393,6 +404,15 @@ SgSymbol* getNameInLocation(SgSymbol* curr, SgStatement* location) return returnVal; } +string correctSymbolModuleName(const string& origFull) +{ + auto it = origFull.find("::"); + if (it == string::npos) + return origFull; + else + return origFull.substr(it + 2); +} + namespace Distribution { const string Array::GetNameInLocation(void* location_p) const diff --git a/src/Utils/module_utils.h b/src/Utils/module_utils.h index 8fd21da..e78b8e5 100644 --- a/src/Utils/module_utils.h +++ b/src/Utils/module_utils.h @@ -1,5 +1,6 @@ #pragma once +std::string correctSymbolModuleName(const std::string& origFull); const std::set& getModuleSymbols(SgStatement* func); void getModulesAndFunctions(SgFile* file, std::vector& modulesAndFunctions); void findModulesInFile(SgFile* file, std::vector& modules); diff --git a/src/Utils/version.h b/src/Utils/version.h index 2633120..ed408b9 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2416" +#define VERSION_SPF "2417"