summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Peter Collingbourne <peter@pcc.me.uk>2012-05-31 16:13:25 +0100
committerGravatar Peter Collingbourne <peter@pcc.me.uk>2012-05-31 16:13:25 +0100
commitdd9fbd910a0241d8d4234d802f9e94ae2b971f2b (patch)
treeeae118f4f4d85e114a0d5cacb1b140e9009caf1a
parent127ee73c43ab3ba092d799a1ff628af2b171a2bb (diff)
GPUVerify: teach analyses, dualiser and race instrumenter about assigns with multiple LHSs
-rw-r--r--Source/GPUVerify/ArrayControlFlowAnalyser.cs33
-rw-r--r--Source/GPUVerify/GPUVerifier.cs74
-rw-r--r--Source/GPUVerify/KernelDualiser.cs23
-rw-r--r--Source/GPUVerify/MayBeFlattened2DTidOrGidAnalyser.cs20
-rw-r--r--Source/GPUVerify/MayBeGidAnalyser.cs20
-rw-r--r--Source/GPUVerify/MayBeGlobalSizeAnalyser.cs20
-rw-r--r--Source/GPUVerify/MayBeIdPlusConstantAnalyser.cs40
-rw-r--r--Source/GPUVerify/MayBePowerOfTwoAnalyser.cs16
-rw-r--r--Source/GPUVerify/MayBeThreadConfigurationVariableAnalyser.cs20
-rw-r--r--Source/GPUVerify/RaceInstrumenterBase.cs98
10 files changed, 188 insertions, 176 deletions
diff --git a/Source/GPUVerify/ArrayControlFlowAnalyser.cs b/Source/GPUVerify/ArrayControlFlowAnalyser.cs
index b202dbb3..20036abe 100644
--- a/Source/GPUVerify/ArrayControlFlowAnalyser.cs
+++ b/Source/GPUVerify/ArrayControlFlowAnalyser.cs
@@ -117,27 +117,28 @@ namespace GPUVerify
if (c is AssignCmd)
{
AssignCmd assignCmd = c as AssignCmd;
- Debug.Assert(assignCmd.Lhss.Count == 1);
- Debug.Assert(assignCmd.Rhss.Count == 1);
- if (assignCmd.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assignCmd.Lhss.Count; i++)
{
- SimpleAssignLhs lhs = assignCmd.Lhss[0] as SimpleAssignLhs;
- Expr rhs = assignCmd.Rhss[0];
+ if (assignCmd.Lhss[i] is SimpleAssignLhs)
+ {
+ SimpleAssignLhs lhs = assignCmd.Lhss[i] as SimpleAssignLhs;
+ Expr rhs = assignCmd.Rhss[i];
- VariablesOccurringInExpressionVisitor visitor = new VariablesOccurringInExpressionVisitor();
- visitor.VisitExpr(rhs);
+ VariablesOccurringInExpressionVisitor visitor = new VariablesOccurringInExpressionVisitor();
+ visitor.VisitExpr(rhs);
- foreach (Variable v in visitor.GetVariables())
- {
- if (!mayBeDerivedFrom[impl.Name].ContainsKey(v.Name))
- {
- continue;
- }
- foreach (String s in mayBeDerivedFrom[impl.Name][v.Name])
+ foreach (Variable v in visitor.GetVariables())
{
- if (!mayBeDerivedFrom[impl.Name][lhs.AssignedVariable.Name].Contains(s))
+ if (!mayBeDerivedFrom[impl.Name].ContainsKey(v.Name))
{
- SetMayBeDerivedFrom(impl.Name, lhs.AssignedVariable.Name, s);
+ continue;
+ }
+ foreach (String s in mayBeDerivedFrom[impl.Name][v.Name])
+ {
+ if (!mayBeDerivedFrom[impl.Name][lhs.AssignedVariable.Name].Contains(s))
+ {
+ SetMayBeDerivedFrom(impl.Name, lhs.AssignedVariable.Name, s);
+ }
}
}
}
diff --git a/Source/GPUVerify/GPUVerifier.cs b/Source/GPUVerify/GPUVerifier.cs
index bada4cef..27ec052e 100644
--- a/Source/GPUVerify/GPUVerifier.cs
+++ b/Source/GPUVerify/GPUVerifier.cs
@@ -1550,37 +1550,50 @@ namespace GPUVerify
if (c is AssignCmd)
{
AssignCmd assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1);
- Debug.Assert(assign.Rhss.Count == 1);
- AssignLhs lhs = assign.Lhss[0];
- Expr rhs = assign.Rhss[0];
- ReadCollector rc = new ReadCollector(NonLocalState);
- rc.Visit(rhs);
-
- bool foundAdversarial = false;
- foreach (AccessRecord ar in rc.accesses)
+
+ var lhss = new List<AssignLhs>();
+ var rhss = new List<Expr>();
+
+ for (int i = 0; i != assign.Lhss.Count; i++)
{
- if (ArrayModelledAdversarially(ar.v))
+ AssignLhs lhs = assign.Lhss[i];
+ Expr rhs = assign.Rhss[i];
+ ReadCollector rc = new ReadCollector(NonLocalState);
+ rc.Visit(rhs);
+
+ bool foundAdversarial = false;
+ foreach (AccessRecord ar in rc.accesses)
{
- foundAdversarial = true;
- break;
+ if (ArrayModelledAdversarially(ar.v))
+ {
+ foundAdversarial = true;
+ break;
+ }
}
- }
- if (foundAdversarial)
- {
- Debug.Assert(lhs is SimpleAssignLhs);
- result.Add(new HavocCmd(c.tok, new IdentifierExprSeq(new IdentifierExpr[] { (lhs as SimpleAssignLhs).AssignedVariable })));
- continue;
+ if (foundAdversarial)
+ {
+ Debug.Assert(lhs is SimpleAssignLhs);
+ result.Add(new HavocCmd(c.tok, new IdentifierExprSeq(new IdentifierExpr[] { (lhs as SimpleAssignLhs).AssignedVariable })));
+ continue;
+ }
+
+ WriteCollector wc = new WriteCollector(NonLocalState);
+ wc.Visit(lhs);
+ if (wc.GetAccess() != null && ArrayModelledAdversarially(wc.GetAccess().v))
+ {
+ continue; // Just remove the write
+ }
+
+ lhss.Add(lhs);
+ rhss.Add(rhs);
}
- WriteCollector wc = new WriteCollector(NonLocalState);
- wc.Visit(lhs);
- if (wc.GetAccess() != null && ArrayModelledAdversarially(wc.GetAccess().v))
+ if (lhss.Count != 0)
{
- continue; // Just remove the write
+ result.Add(new AssignCmd(assign.tok, lhss, rhss));
}
-
+ continue;
}
result.Add(c);
}
@@ -1892,19 +1905,18 @@ namespace GPUVerify
{
AssignCmd assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1 && assign.Rhss.Count == 1);
-
- AssignLhs lhs = assign.Lhss.ElementAt(0);
- Expr rhs = assign.Rhss.ElementAt(0);
-
- if (!NonLocalAccessCollector.ContainsNonLocalAccess(rhs, NonLocalState) ||
- (!NonLocalAccessCollector.ContainsNonLocalAccess(lhs, NonLocalState) &&
- NonLocalAccessCollector.IsNonLocalAccess(rhs, NonLocalState)))
+ if (assign.Lhss.Zip(assign.Rhss, (lhs, rhs) =>
+ !NonLocalAccessCollector.ContainsNonLocalAccess(rhs, NonLocalState) ||
+ (!NonLocalAccessCollector.ContainsNonLocalAccess(lhs, NonLocalState) &&
+ NonLocalAccessCollector.IsNonLocalAccess(rhs, NonLocalState))).All(b => b))
{
result.simpleCmds.Add(c);
}
else
{
+ Debug.Assert(assign.Lhss.Count == 1 && assign.Rhss.Count == 1);
+ AssignLhs lhs = assign.Lhss.ElementAt(0);
+ Expr rhs = assign.Rhss.ElementAt(0);
rhs = PullOutNonLocalAccessesIntoTemps(result, rhs, impl);
List<AssignLhs> newLhss = new List<AssignLhs>();
newLhss.Add(lhs);
diff --git a/Source/GPUVerify/KernelDualiser.cs b/Source/GPUVerify/KernelDualiser.cs
index 8d51e74e..49b04251 100644
--- a/Source/GPUVerify/KernelDualiser.cs
+++ b/Source/GPUVerify/KernelDualiser.cs
@@ -147,23 +147,22 @@ namespace GPUVerify
{
AssignCmd assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1 && assign.Rhss.Count == 1);
-
- if (assign.Lhss[0] is SimpleAssignLhs &&
- verifier.uniformityAnalyser.IsUniform(procName, (assign.Lhss[0] as SimpleAssignLhs).AssignedVariable.Name))
+ if (assign.Lhss.All(lhs =>
+ lhs is SimpleAssignLhs &&
+ verifier.uniformityAnalyser.IsUniform(procName, (lhs as SimpleAssignLhs).AssignedVariable.Name)))
{
cs.Add(assign);
}
else
{
- List<AssignLhs> newLhss = new List<AssignLhs>();
- List<Expr> newRhss = new List<Expr>();
-
- newLhss.Add(new VariableDualiser(1, verifier.uniformityAnalyser, procName).Visit(assign.Lhss.ElementAt(0).Clone() as AssignLhs) as AssignLhs);
- newLhss.Add(new VariableDualiser(2, verifier.uniformityAnalyser, procName).Visit(assign.Lhss.ElementAt(0).Clone() as AssignLhs) as AssignLhs);
-
- newRhss.Add(new VariableDualiser(1, verifier.uniformityAnalyser, procName).VisitExpr(assign.Rhss.ElementAt(0).Clone() as Expr));
- newRhss.Add(new VariableDualiser(2, verifier.uniformityAnalyser, procName).VisitExpr(assign.Rhss.ElementAt(0).Clone() as Expr));
+ List<AssignLhs> newLhss = assign.Lhss.SelectMany(lhs => new AssignLhs[] {
+ new VariableDualiser(1, verifier.uniformityAnalyser, procName).Visit(lhs.Clone() as AssignLhs) as AssignLhs,
+ new VariableDualiser(2, verifier.uniformityAnalyser, procName).Visit(lhs.Clone() as AssignLhs) as AssignLhs
+ }).ToList();
+ List<Expr> newRhss = assign.Rhss.SelectMany(rhs => new Expr[] {
+ new VariableDualiser(1, verifier.uniformityAnalyser, procName).VisitExpr(rhs.Clone() as Expr),
+ new VariableDualiser(2, verifier.uniformityAnalyser, procName).VisitExpr(rhs.Clone() as Expr)
+ }).ToList();
AssignCmd newAssign = new AssignCmd(assign.tok, newLhss, newRhss);
diff --git a/Source/GPUVerify/MayBeFlattened2DTidOrGidAnalyser.cs b/Source/GPUVerify/MayBeFlattened2DTidOrGidAnalyser.cs
index 88ac000f..3d65ec61 100644
--- a/Source/GPUVerify/MayBeFlattened2DTidOrGidAnalyser.cs
+++ b/Source/GPUVerify/MayBeFlattened2DTidOrGidAnalyser.cs
@@ -186,19 +186,19 @@ namespace GPUVerify
private void TransferAssign(Implementation impl, AssignCmd assignCmd, string component)
{
- Debug.Assert(assignCmd.Lhss.Count == 1);
- Debug.Assert(assignCmd.Rhss.Count == 1);
- if (assignCmd.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assignCmd.Lhss.Count; ++i)
{
- SimpleAssignLhs lhs = assignCmd.Lhss[0] as SimpleAssignLhs;
- Expr rhs = assignCmd.Rhss[0];
-
- if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
- && !MayBe(component, impl.Name, rhs))
+ if (assignCmd.Lhss[i] is SimpleAssignLhs)
{
- SetNot(component, impl.Name, lhs.AssignedVariable.Name);
- }
+ SimpleAssignLhs lhs = assignCmd.Lhss[i] as SimpleAssignLhs;
+ Expr rhs = assignCmd.Rhss[i];
+ if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
+ && !MayBe(component, impl.Name, rhs))
+ {
+ SetNot(component, impl.Name, lhs.AssignedVariable.Name);
+ }
+ }
}
}
diff --git a/Source/GPUVerify/MayBeGidAnalyser.cs b/Source/GPUVerify/MayBeGidAnalyser.cs
index bb0f8d22..969e8935 100644
--- a/Source/GPUVerify/MayBeGidAnalyser.cs
+++ b/Source/GPUVerify/MayBeGidAnalyser.cs
@@ -186,19 +186,19 @@ namespace GPUVerify
private void TransferAssign(Implementation impl, AssignCmd assignCmd, string component)
{
- Debug.Assert(assignCmd.Lhss.Count == 1);
- Debug.Assert(assignCmd.Rhss.Count == 1);
- if (assignCmd.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assignCmd.Lhss.Count; ++i)
{
- SimpleAssignLhs lhs = assignCmd.Lhss[0] as SimpleAssignLhs;
- Expr rhs = assignCmd.Rhss[0];
-
- if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
- && !MayBe(component, impl.Name, rhs))
+ if (assignCmd.Lhss[i] is SimpleAssignLhs)
{
- SetNot(component, impl.Name, lhs.AssignedVariable.Name);
- }
+ SimpleAssignLhs lhs = assignCmd.Lhss[i] as SimpleAssignLhs;
+ Expr rhs = assignCmd.Rhss[i];
+ if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
+ && !MayBe(component, impl.Name, rhs))
+ {
+ SetNot(component, impl.Name, lhs.AssignedVariable.Name);
+ }
+ }
}
}
diff --git a/Source/GPUVerify/MayBeGlobalSizeAnalyser.cs b/Source/GPUVerify/MayBeGlobalSizeAnalyser.cs
index cd3c27d6..579f6805 100644
--- a/Source/GPUVerify/MayBeGlobalSizeAnalyser.cs
+++ b/Source/GPUVerify/MayBeGlobalSizeAnalyser.cs
@@ -186,19 +186,19 @@ namespace GPUVerify
private void TransferAssign(Implementation impl, AssignCmd assignCmd, string component)
{
- Debug.Assert(assignCmd.Lhss.Count == 1);
- Debug.Assert(assignCmd.Rhss.Count == 1);
- if (assignCmd.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assignCmd.Lhss.Count; ++i)
{
- SimpleAssignLhs lhs = assignCmd.Lhss[0] as SimpleAssignLhs;
- Expr rhs = assignCmd.Rhss[0];
-
- if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
- && !MayBe(component, impl.Name, rhs))
+ if (assignCmd.Lhss[i] is SimpleAssignLhs)
{
- SetNot(component, impl.Name, lhs.AssignedVariable.Name);
- }
+ SimpleAssignLhs lhs = assignCmd.Lhss[i] as SimpleAssignLhs;
+ Expr rhs = assignCmd.Rhss[i];
+ if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
+ && !MayBe(component, impl.Name, rhs))
+ {
+ SetNot(component, impl.Name, lhs.AssignedVariable.Name);
+ }
+ }
}
}
diff --git a/Source/GPUVerify/MayBeIdPlusConstantAnalyser.cs b/Source/GPUVerify/MayBeIdPlusConstantAnalyser.cs
index 676213e6..a8563dfa 100644
--- a/Source/GPUVerify/MayBeIdPlusConstantAnalyser.cs
+++ b/Source/GPUVerify/MayBeIdPlusConstantAnalyser.cs
@@ -98,38 +98,38 @@ namespace GPUVerify
if (c is AssignCmd)
{
AssignCmd assign = c as AssignCmd;
- assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1);
- Debug.Assert(assign.Rhss.Count == 1);
- if (assign.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assign.Lhss.Count; i++)
{
- Variable lhsV = (assign.Lhss[0] as SimpleAssignLhs).AssignedVariable.Decl;
-
- if (mayBeAssignedId[impl.Name].ContainsKey(lhsV.Name))
+ if (assign.Lhss[i] is SimpleAssignLhs)
{
+ Variable lhsV = (assign.Lhss[i] as SimpleAssignLhs).AssignedVariable.Decl;
- if (assign.Rhss[0] is IdentifierExpr)
+ if (mayBeAssignedId[impl.Name].ContainsKey(lhsV.Name))
{
- Variable rhsV = (assign.Rhss[0] as IdentifierExpr).Decl;
-
- if (mayBeAnalyser.MayBe(ComponentString(), impl.Name, rhsV.Name))
+ if (assign.Rhss[i] is IdentifierExpr)
{
- mayBeAssignedId[impl.Name][lhsV.Name] = true;
- }
- }
- else
- {
+ Variable rhsV = (assign.Rhss[i] as IdentifierExpr).Decl;
- Expr constantIncrement = GetConstantIncrement(lhsV, assign.Rhss[0]);
+ if (mayBeAnalyser.MayBe(ComponentString(), impl.Name, rhsV.Name))
+ {
+ mayBeAssignedId[impl.Name][lhsV.Name] = true;
+ }
- if (constantIncrement != null)
- {
- incrementedBy[impl.Name][lhsV.Name].Add(constantIncrement);
}
+ else
+ {
+
+ Expr constantIncrement = GetConstantIncrement(lhsV, assign.Rhss[i]);
+ if (constantIncrement != null)
+ {
+ incrementedBy[impl.Name][lhsV.Name].Add(constantIncrement);
+ }
+
+ }
}
}
}
diff --git a/Source/GPUVerify/MayBePowerOfTwoAnalyser.cs b/Source/GPUVerify/MayBePowerOfTwoAnalyser.cs
index a00462c8..506add7c 100644
--- a/Source/GPUVerify/MayBePowerOfTwoAnalyser.cs
+++ b/Source/GPUVerify/MayBePowerOfTwoAnalyser.cs
@@ -85,18 +85,18 @@ namespace GPUVerify
if (c is AssignCmd)
{
AssignCmd assign = c as AssignCmd;
- assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1);
- Debug.Assert(assign.Rhss.Count == 1);
- if (assign.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assign.Lhss.Count; i++)
{
- Variable v = (assign.Lhss[0] as SimpleAssignLhs).AssignedVariable.Decl;
- if (mayBePowerOfTwoInfo[impl.Name].ContainsKey(v.Name))
+ if (assign.Lhss[i] is SimpleAssignLhs)
{
- if (isPowerOfTwoOperation(v, assign.Rhss[0]))
+ Variable v = (assign.Lhss[i] as SimpleAssignLhs).AssignedVariable.Decl;
+ if (mayBePowerOfTwoInfo[impl.Name].ContainsKey(v.Name))
{
- mayBePowerOfTwoInfo[impl.Name][v.Name] = true;
+ if (isPowerOfTwoOperation(v, assign.Rhss[i]))
+ {
+ mayBePowerOfTwoInfo[impl.Name][v.Name] = true;
+ }
}
}
}
diff --git a/Source/GPUVerify/MayBeThreadConfigurationVariableAnalyser.cs b/Source/GPUVerify/MayBeThreadConfigurationVariableAnalyser.cs
index bca71171..53efbea8 100644
--- a/Source/GPUVerify/MayBeThreadConfigurationVariableAnalyser.cs
+++ b/Source/GPUVerify/MayBeThreadConfigurationVariableAnalyser.cs
@@ -221,19 +221,19 @@ namespace GPUVerify
private void TransferAssign(Implementation impl, AssignCmd assignCmd, string component)
{
- Debug.Assert(assignCmd.Lhss.Count == 1);
- Debug.Assert(assignCmd.Rhss.Count == 1);
- if (assignCmd.Lhss[0] is SimpleAssignLhs)
+ for (int i = 0; i != assignCmd.Lhss.Count; ++i)
{
- SimpleAssignLhs lhs = assignCmd.Lhss[0] as SimpleAssignLhs;
- Expr rhs = assignCmd.Rhss[0];
-
- if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
- && !MayBe(component, impl.Name, rhs))
+ if (assignCmd.Lhss[i] is SimpleAssignLhs)
{
- SetNot(component, impl.Name, lhs.AssignedVariable.Name);
- }
+ SimpleAssignLhs lhs = assignCmd.Lhss[i] as SimpleAssignLhs;
+ Expr rhs = assignCmd.Rhss[i];
+ if (MayBe(component, impl.Name, lhs.AssignedVariable.Name)
+ && !MayBe(component, impl.Name, rhs))
+ {
+ SetNot(component, impl.Name, lhs.AssignedVariable.Name);
+ }
+ }
}
}
diff --git a/Source/GPUVerify/RaceInstrumenterBase.cs b/Source/GPUVerify/RaceInstrumenterBase.cs
index d7edf647..a0c4b5f7 100644
--- a/Source/GPUVerify/RaceInstrumenterBase.cs
+++ b/Source/GPUVerify/RaceInstrumenterBase.cs
@@ -846,79 +846,79 @@ namespace GPUVerify
if (c is AssignCmd)
{
AssignCmd assign = c as AssignCmd;
- Debug.Assert(assign.Lhss.Count == 1);
- Debug.Assert(assign.Rhss.Count == 1);
- AssignLhs lhs = assign.Lhss[0];
- Expr rhs = assign.Rhss[0];
ReadCollector rc = new ReadCollector(NonLocalStateToCheck);
- rc.Visit(rhs);
+ foreach (var rhs in assign.Rhss)
+ rc.Visit(rhs);
if (rc.accesses.Count > 0)
{
- Debug.Assert(rc.accesses.Count == 1);
- AccessRecord ar = rc.accesses[0];
-
- if (shouldAddLogCallAndIncr())
+ foreach (AccessRecord ar in rc.accesses)
{
-
- ExprSeq inParams = new ExprSeq();
- if (ar.IndexZ != null)
+ if (shouldAddLogCallAndIncr())
{
- inParams.Add(ar.IndexZ);
- }
- if (ar.IndexY != null)
- {
- inParams.Add(ar.IndexY);
- }
- if (ar.IndexX != null)
- {
- inParams.Add(ar.IndexX);
- }
- Procedure logProcedure = GetLogAccessProcedure(c.tok, "_LOG_READ_" + ar.v.Name);
+ ExprSeq inParams = new ExprSeq();
+ if (ar.IndexZ != null)
+ {
+ inParams.Add(ar.IndexZ);
+ }
+ if (ar.IndexY != null)
+ {
+ inParams.Add(ar.IndexY);
+ }
+ if (ar.IndexX != null)
+ {
+ inParams.Add(ar.IndexX);
+ }
- CallCmd logAccessCallCmd = new CallCmd(c.tok, logProcedure.Name, inParams, new IdentifierExprSeq());
+ Procedure logProcedure = GetLogAccessProcedure(c.tok, "_LOG_READ_" + ar.v.Name);
- logAccessCallCmd.Proc = logProcedure;
+ CallCmd logAccessCallCmd = new CallCmd(c.tok, logProcedure.Name, inParams, new IdentifierExprSeq());
- cs.Add(logAccessCallCmd);
+ logAccessCallCmd.Proc = logProcedure;
+ cs.Add(logAccessCallCmd);
+
+ }
}
}
- WriteCollector wc = new WriteCollector(NonLocalStateToCheck);
- wc.Visit(lhs);
- if (wc.GetAccess() != null)
+ foreach (var lhs in assign.Lhss)
{
- AccessRecord ar = wc.GetAccess();
-
- if (shouldAddLogCallAndIncr())
+ WriteCollector wc = new WriteCollector(NonLocalStateToCheck);
+ wc.Visit(lhs);
+ if (wc.GetAccess() != null)
{
+ AccessRecord ar = wc.GetAccess();
- ExprSeq inParams = new ExprSeq();
- if (ar.IndexZ != null)
- {
- inParams.Add(ar.IndexZ);
- }
- if (ar.IndexY != null)
- {
- inParams.Add(ar.IndexY);
- }
- if (ar.IndexX != null)
+ if (shouldAddLogCallAndIncr())
{
- inParams.Add(ar.IndexX);
- }
- Procedure logProcedure = GetLogAccessProcedure(c.tok, "_LOG_WRITE_" + ar.v.Name);
+ ExprSeq inParams = new ExprSeq();
+ if (ar.IndexZ != null)
+ {
+ inParams.Add(ar.IndexZ);
+ }
+ if (ar.IndexY != null)
+ {
+ inParams.Add(ar.IndexY);
+ }
+ if (ar.IndexX != null)
+ {
+ inParams.Add(ar.IndexX);
+ }
- CallCmd logAccessCallCmd = new CallCmd(c.tok, logProcedure.Name, inParams, new IdentifierExprSeq());
+ Procedure logProcedure = GetLogAccessProcedure(c.tok, "_LOG_WRITE_" + ar.v.Name);
- logAccessCallCmd.Proc = logProcedure;
+ CallCmd logAccessCallCmd = new CallCmd(c.tok, logProcedure.Name, inParams, new IdentifierExprSeq());
- cs.Add(logAccessCallCmd);
+ logAccessCallCmd.Proc = logProcedure;
- addedLogWrite = true;
+ cs.Add(logAccessCallCmd);
+ addedLogWrite = true;
+
+ }
}
}
}