1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
From 665a0df36ab2e6edf3921ea0bda5ff047781c266 Mon Sep 17 00:00:00 2001
From: Matt Turner <mattst88@gmail.com>
Date: Mon, 14 Sep 2026 23:20:13 -0400
Subject: [PATCH] Fix format specifier for 64-bit index in error messages
Commit e2ab21f2 ("Implement GL_EXT_shader_64bit_indexing") made the
index int64_t but left the "index out of range" messages using '%d'.
32-bit ARM and PowerPC align 64-bit variadic arguments, so '%d' reads
the skipped padding (a stack slot on ARM, a register on PowerPC) and
prints garbage. This breaks the runtests single-thread vs. multithread
output comparison.
Fixes #4180
(cherry picked from commit b44e6091549ca4cc801a74622848cbc259cce6db)
---
glslang/MachineIndependent/ParseContextBase.cpp | 10 +++++-----
glslang/MachineIndependent/ParseHelper.cpp | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git ./glslang/MachineIndependent/ParseContextBase.cpp ./glslang/MachineIndependent/ParseContextBase.cpp
index 50bec19f..1acc2748 100644
--- ./glslang/MachineIndependent/ParseContextBase.cpp
+++ ./glslang/MachineIndependent/ParseContextBase.cpp
@@ -290,27 +290,27 @@ void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int
type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; };
if (index < 0) {
- error(loc, "", "[", "index out of range '%d'", index);
+ error(loc, "", "[", "index out of range '%lld'", (long long)index);
index = 0;
} else if (type.isArray()) {
if (type.isSizedArray() && !sizeIsSpecializationExpression() &&
index >= type.getOuterArraySize()) {
- error(loc, "", "[", "array index out of range '%d'", index);
+ error(loc, "", "[", "array index out of range '%lld'", (long long)index);
index = type.getOuterArraySize() - 1;
}
} else if (type.isVector()) {
if (index >= type.getVectorSize()) {
- error(loc, "", "[", "vector index out of range '%d'", index);
+ error(loc, "", "[", "vector index out of range '%lld'", (long long)index);
index = type.getVectorSize() - 1;
}
} else if (type.isMatrix()) {
if (index >= type.getMatrixCols()) {
- error(loc, "", "[", "matrix index out of range '%d'", index);
+ error(loc, "", "[", "matrix index out of range '%lld'", (long long)index);
index = type.getMatrixCols() - 1;
}
} else if (type.isCoopVecNV()) {
if (index >= type.computeNumComponents()) {
- error(loc, "", "[", "cooperative vector index out of range '%d'", index);
+ error(loc, "", "[", "cooperative vector index out of range '%lld'", (long long)index);
index = type.computeNumComponents() - 1;
}
}
diff --git ./glslang/MachineIndependent/ParseHelper.cpp ./glslang/MachineIndependent/ParseHelper.cpp
index dbafc8a8..b1124713 100644
--- ./glslang/MachineIndependent/ParseHelper.cpp
+++ ./glslang/MachineIndependent/ParseHelper.cpp
@@ -631,15 +631,15 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
base->getWritableType().setImplicitlySized(true);
if (base->getQualifier().builtIn == EbvClipDistance &&
indexValue >= resources.maxClipDistances) {
- error(loc, "gl_ClipDistance", "[", "array index out of range '%d'", indexValue);
+ error(loc, "gl_ClipDistance", "[", "array index out of range '%lld'", (long long)indexValue);
}
else if (base->getQualifier().builtIn == EbvCullDistance &&
indexValue >= resources.maxCullDistances) {
- error(loc, "gl_CullDistance", "[", "array index out of range '%d'", indexValue);
+ error(loc, "gl_CullDistance", "[", "array index out of range '%lld'", (long long)indexValue);
}
else if (base->getQualifier().builtIn == EbvSampleMask &&
indexValue >= (resources.maxSamples + 31) / 32) {
- error(loc, "gl_SampleMask", "[", "array index out of range '%d'", indexValue);
+ error(loc, "gl_SampleMask", "[", "array index out of range '%lld'", (long long)indexValue);
}
// For 2D per-view builtin arrays, update the inner dimension size in parent type
if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) {
--
2.54.0
|