diff --git a/source/binary.cpp b/source/binary.cpp index f3df4ad7c..94e51a27e 100644 --- a/source/binary.cpp +++ b/source/binary.cpp @@ -451,6 +451,7 @@ spv_result_t Parser::parseOperand(spv_parsed_instruction_t* inst, case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER: case SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER: + parsed_operand.type = SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER; if (inst->opcode == SpvOpSwitch) { // The literal operands have the same type as the value // referenced by the selector Id. diff --git a/test/BinaryToText.cpp b/test/BinaryToText.cpp index eb1cd1f68..61e6ab6e5 100644 --- a/test/BinaryToText.cpp +++ b/test/BinaryToText.cpp @@ -497,4 +497,14 @@ TEST_F(MaskSorting, MasksAreSortedFromLSBToMSB) { " %5 %6 %7 %8 %9 %10 %11 %12 %13\n")); } +using OperandTypeTest = spvtest::TextToBinaryTest; + +TEST_F(OperandTypeTest, OptionalTypedLiteralNumber) { + const std::string input = + "%1 = OpTypeInt 32 0\n" + "%2 = OpConstant %1 42\n" + "OpSwitch %2 %3 100 %4\n"; + EXPECT_EQ(input, EncodeAndDecodeSuccessfully(input)); +} + } // anonymous namespace