mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-22 19:50:05 +00:00
spirv-fuzz: Ignore specialization constants (#3664)
`FuzzerPassInterchangeSignednessOfIntegerOperands` and `FuzzerPassInterchangeZeroLikeConstants` both included specialization constants when trying to find integer constants with known values. However, this is incorrect behavior because we do not know the value of specialization constants. Furthermore, ConstantManager does not support them, and this led to crashes where we assumed we could look up specialization constants via the ConstantManager. This change fixes both passes to ignore specialization constants. Fixes #3663.
This commit is contained in:
parent
1435e427da
commit
5e5929455f
@ -91,6 +91,13 @@ void FuzzerPassInterchangeSignednessOfIntegerOperands::Apply() {
|
||||
|
||||
uint32_t FuzzerPassInterchangeSignednessOfIntegerOperands::
|
||||
FindOrCreateToggledIntegerConstant(uint32_t id) {
|
||||
// |id| must not be a specialization constant because we do not know the value
|
||||
// of specialization constants.
|
||||
if (opt::IsSpecConstantInst(
|
||||
GetIRContext()->get_def_use_mgr()->GetDef(id)->opcode())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto constant = GetIRContext()->get_constant_mgr()->FindDeclaredConstant(id);
|
||||
|
||||
// This pass only toggles integer constants.
|
||||
|
@ -34,6 +34,12 @@ FuzzerPassInterchangeZeroLikeConstants::
|
||||
|
||||
uint32_t FuzzerPassInterchangeZeroLikeConstants::FindOrCreateToggledConstant(
|
||||
opt::Instruction* declaration) {
|
||||
// |declaration| must not be a specialization constant because we do not know
|
||||
// the value of specialization constants.
|
||||
if (opt::IsSpecConstantInst(declaration->opcode())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto constant = GetIRContext()->get_constant_mgr()->FindDeclaredConstant(
|
||||
declaration->result_id());
|
||||
|
||||
@ -107,4 +113,4 @@ void FuzzerPassInterchangeZeroLikeConstants::Apply() {
|
||||
}
|
||||
}
|
||||
} // namespace fuzz
|
||||
} // namespace spvtools
|
||||
} // namespace spvtools
|
||||
|
Loading…
Reference in New Issue
Block a user