blob: 97bca1df02663d162274382ea1905813d6f68214 [file] [log] [blame]
// Copyright (c) 2016 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Validation tests for Universal Limits. (Section 2.17 of the SPIR-V Spec)
#include <sstream>
#include <string>
#include <utility>
#include "gmock/gmock.h"
#include "unit_spirv.h"
#include "val_fixtures.h"
using ::testing::HasSubstr;
using ::testing::MatchesRegex;
using std::string;
using ValidateLimits = spvtest::ValidateBase<bool>;
string header = R"(
OpCapability Shader
OpMemoryModel Logical GLSL450
)";
TEST_F(ValidateLimits, idLargerThanBoundBad) {
string str = header + R"(
; %i32 has ID 1
%i32 = OpTypeInt 32 1
%c = OpConstant %i32 100
; Fake an instruction with 64 as the result id.
; !64 = OpConstantNull %i32
!0x3002e !1 !64
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions());
EXPECT_THAT(
getDiagnosticString(),
HasSubstr("Result <id> '64' must be less than the ID bound '3'."));
}
TEST_F(ValidateLimits, idEqualToBoundBad) {
string str = header + R"(
; %i32 has ID 1
%i32 = OpTypeInt 32 1
%c = OpConstant %i32 100
; Fake an instruction with 64 as the result id.
; !64 = OpConstantNull %i32
!0x3002e !1 !64
)";
CompileSuccessfully(str);
// The largest ID used in this program is 64. Let's overwrite the ID bound in
// the header to be 64. This should result in an error because all IDs must
// satisfy: 0 < id < bound.
OverwriteAssembledBinary(3, 64);
ASSERT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions());
EXPECT_THAT(
getDiagnosticString(),
HasSubstr("Result <id> '64' must be less than the ID bound '64'."));
}