mirror of
https://github.com/KhronosGroup/glslang
synced 2024-09-19 12:19:53 +00:00
Merge pull request #1824 from KhronosGroup/fix-spec-expr-array-check
SPV: Fix #1783: Don't do bounds checking for spec-const-expression size
This commit is contained in:
commit
50dc8c350b
6
Test/baseResults/spv.specConstArrayCheck.vert.out
Executable file
6
Test/baseResults/spv.specConstArrayCheck.vert.out
Executable file
@ -0,0 +1,6 @@
|
||||
spv.specConstArrayCheck.vert
|
||||
ERROR: 0:13: '[' : array index out of range '6'
|
||||
ERROR: 1 compilation errors. No code generated.
|
||||
|
||||
|
||||
SPIR-V is not generated for failed compile or link
|
14
Test/spv.specConstArrayCheck.vert
Executable file
14
Test/spv.specConstArrayCheck.vert
Executable file
@ -0,0 +1,14 @@
|
||||
#version 450
|
||||
|
||||
layout(constant_id = 0) const uint a = 1;
|
||||
layout(constant_id = 1) const uint b = 2;
|
||||
layout(location = 0) out uint o;
|
||||
|
||||
void main() {
|
||||
uint arr1[a+a];
|
||||
uint arr2[b];
|
||||
o = arr1[1];
|
||||
o = arr2[1];
|
||||
o = arr1[6];
|
||||
o = arr2[6];
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
// This header is generated by the make-revision script.
|
||||
|
||||
#define GLSLANG_PATCH_LEVEL 3276
|
||||
#define GLSLANG_PATCH_LEVEL 3294
|
||||
|
@ -254,11 +254,17 @@ void TParseContextBase::trackLinkage(TSymbol& symbol)
|
||||
// Give an error if not.
|
||||
void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
|
||||
{
|
||||
const auto sizeIsSpecializationExpression = [&type]() {
|
||||
return type.containsSpecializationSize() &&
|
||||
type.getArraySizes()->getOuterNode() != nullptr &&
|
||||
type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; };
|
||||
|
||||
if (index < 0) {
|
||||
error(loc, "", "[", "index out of range '%d'", index);
|
||||
index = 0;
|
||||
} else if (type.isArray()) {
|
||||
if (type.isSizedArray() && index >= type.getOuterArraySize()) {
|
||||
if (type.isSizedArray() && !sizeIsSpecializationExpression() &&
|
||||
index >= type.getOuterArraySize()) {
|
||||
error(loc, "", "[", "array index out of range '%d'", index);
|
||||
index = type.getOuterArraySize() - 1;
|
||||
}
|
||||
|
@ -545,6 +545,7 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"vulkan.vert",
|
||||
"vulkan.comp",
|
||||
"samplerlessTextureFunctions.frag",
|
||||
"spv.specConstArrayCheck.vert",
|
||||
})),
|
||||
FileNameAsCustomTestSuffix
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user