Skip to content

Commit c5fa1aa

Browse files
committed
Fix: Don't make variable const if modified using array accessor.
E.g. mat2 m = ...; // Shouldn't make const! m[1].x *= 2.0;
1 parent cd8f511 commit c5fa1aa

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

ShaderShrinker/Shrinker.Parser/Optimizations/DetectConstantsExtension.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static bool DetectConstants(this SyntaxNode rootNode)
5252
var uses = nodesInScope
5353
.Where(o => o.Token?.Content.StartsWithVarName(defCandidate.Name) == true)
5454
.ToList();
55-
var isModified = uses.Any(o => o.Next?.Token?.IsAnyOf(SymbolOperatorToken.ModifyingOperator) == true);
55+
var isModified = uses.Any(IsModifiedByOperator);
5656

5757
// ...or '++i' ?
5858
if (!isModified)
@@ -93,5 +93,18 @@ public static bool DetectConstants(this SyntaxNode rootNode)
9393

9494
return repeatSimplifications;
9595
}
96+
97+
private static bool IsModifiedByOperator(SyntaxNode node)
98+
{
99+
// Could be node[index]
100+
if (node.Next is SquareBracketSyntaxNode)
101+
node = node.Next;
102+
103+
// Could be node.rgb
104+
if (node.Next?.Token is DotToken)
105+
node = node.Next?.Next;
106+
107+
return node.Next?.Token?.IsAnyOf(SymbolOperatorToken.ModifyingOperator) == true;
108+
}
96109
}
97110
}

ShaderShrinker/UnitTests/ShrinkerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,7 @@ public void CheckFullOptimizationDoesNotCorruptArrays(
20322032
[Values(
20332033
"int main() { const int arr[2] = int[2](23, 32); return arr[0]; }",
20342034
"int main() { int arr[2]; arr[0] = 1; }",
2035-
"int main() { const int arr[] = int[](1); arr[0] *= 2; }",
2035+
"int main() { int arr[] = int[](1); arr[0] *= 2; }",
20362036
"int main() { int arr[] = int[](1); arr[0] = arr[1] * 2; }",
20372037
"int main() { const int arr[2] = int[2](23, 32); return arr[1]; }")] string expected)
20382038
{

0 commit comments

Comments
 (0)