fixed omp analysis
This commit is contained in:
@@ -721,6 +721,27 @@ static inline void addToAttribute(SgStatement* st, int var, vector<SgExpression*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_private_in_do(SgStatement* st, const string& var)
|
||||||
|
{
|
||||||
|
checkNull(st, convertFileName(__FILE__).c_str(), __LINE__);
|
||||||
|
|
||||||
|
if (st->variant() != FOR_NODE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SgStatement* lastNode = st->lastNodeOfStmt();
|
||||||
|
for (SgStatement* op = st->lexNext(); st != lastNode; st = st->lexNext())
|
||||||
|
{
|
||||||
|
if (st->variant() == ASSIGN_STAT)
|
||||||
|
{
|
||||||
|
SgExpression* ex = st->expr(0);
|
||||||
|
if (ex->variant() == ARRAY_REF || ex->variant() == VAR_REF)
|
||||||
|
if (var == ex->symbol()->identifier())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
vector<OmpDir> parseOmpDirs(void* stIn, const set<string> &globalPriv, bool forDo)
|
vector<OmpDir> parseOmpDirs(void* stIn, const set<string> &globalPriv, bool forDo)
|
||||||
{
|
{
|
||||||
SgStatement* st = (SgStatement*)stIn;
|
SgStatement* st = (SgStatement*)stIn;
|
||||||
@@ -825,7 +846,10 @@ vector<OmpDir> parseOmpDirs(void* stIn, const set<string> &globalPriv, bool forD
|
|||||||
{
|
{
|
||||||
vector<SgExpression*> list;
|
vector<SgExpression*> list;
|
||||||
for (auto& var : globalPriv)
|
for (auto& var : globalPriv)
|
||||||
|
if (is_private_in_do(st, var))
|
||||||
list.push_back(new SgVarRefExp(findSymbolOrCreate(current_file, var, NULL, getFuncStat(st))));
|
list.push_back(new SgVarRefExp(findSymbolOrCreate(current_file, var, NULL, getFuncStat(st))));
|
||||||
|
|
||||||
|
if (list.size())
|
||||||
addToAttribute(st, ACC_PRIVATE_OP, list);
|
addToAttribute(st, ACC_PRIVATE_OP, list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_SPF "2262"
|
#define VERSION_SPF "2263"
|
||||||
|
|||||||
Reference in New Issue
Block a user