SPIRV-Tools/test
Steven Perron 93c4c184d5 Handle types with self references.
By using forward pointers, we are able to define a struct that has a
pointer to itself.  This could be directly or indirectly.  The current
implementation of the type manager did not handle this case.  There are
three changes that are made in this commit inorder to handle this case:

1) Change the handling of OpTypeForwardPointer

The current handling of OpTypeForwardsPointer is broken if there is a
reference to the pointer before the real definition.  When build the
type that contain the forward delared pointer, the type manager will ask
for the type for that ID, and will get a nullptr because it does not
exists.  This nullptr is not handleded very well.

The change is to keep track of the incomplete types the first time
through all of the types.  An incomplete type is a ForwardPointer or any
type that references an incomplete type.

Then we implement a second pass through the incomplete types that will
complete them.

2) Hashing types.

When hashing a type, we want to uses all of the subtypes as part of the
hash.  However, with types that reference them selves, this creates an
infinite recursion.  To get around this, we keep track of which types
have been seen on the path from the root type.  If we have see the
current type already then we can stop the recursion.

3) Comparing types.

In order to check if two types are the same, we must check that all of
their subtypes are the same as well.  This also causes an infinit
recursion.  The solution is to stop comparing the subtypes if we are
trying to compare two pointer types that we are already in the middle of
comparing.  The ideas is that if the two pointer are different, then in
progress compare will return false itself.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1578.
2018-05-30 15:48:38 -04:00
..
comp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
link linker: Properly remove FuncParamAttr from imported symbols 2018-04-06 09:55:54 -04:00
opt Handle types with self references. 2018-05-30 15:48:38 -04:00
scripts Added --compact-ids to /tools/opt 2017-04-20 10:54:39 -04:00
stats Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
util Vector DCE (#1512) 2018-04-23 11:13:07 -04:00
val Validate that only a single OpMemoryModel is provided. 2018-05-24 08:43:14 -04:00
assembly_context_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
assembly_format_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
binary_destroy_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
binary_endianness_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
binary_header_get_test.cpp Support SPIR-V 1.3 and Vulkan 1.1 2018-03-06 15:17:31 -05:00
binary_parse_test.cpp Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
binary_strnlen_s_test.cpp Support building under CYGWIN 2016-12-21 10:34:23 -05:00
binary_to_text_test.cpp hex_float: Use max_digits10 for the float precision 2018-04-03 12:53:10 -04:00
binary_to_text.literal_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
bit_stream.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
c_interface_test.cpp Build SPIRV-Tools as shared library 2018-02-07 10:43:32 -05:00
CMakeLists.txt Add --time-report to spirv-opt 2018-03-20 21:30:06 -04:00
comment_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
cpp_interface_test.cpp Add SpirvTools::Validate that takes an options object 2017-03-17 12:48:51 -04:00
diagnostic_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
enum_set_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
enum_string_mapping_test.cpp Support SPV_GOOGLE_decorate_string and SPV_GOOGLE_hlsl_functionality1 2018-03-05 13:34:13 -05:00
ext_inst.debuginfo_test.cpp Add asm, dis support for DebugInfo extended instruction set 2017-12-22 09:39:36 -05:00
ext_inst.glsl_test.cpp Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
ext_inst.opencl_test.cpp Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
fix_word_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
generator_magic_number_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
hex_float_test.cpp hex_float: Use max_digits10 for the float precision 2018-04-03 12:53:10 -04:00
huffman_codec.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
immediate_int_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
libspirv_macros_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
log_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
move_to_front_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
name_mapper_test.cpp hex_float: Use max_digits10 for the float precision 2018-04-03 12:53:10 -04:00
named_id_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
opcode_make_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
opcode_require_capabilities_test.cpp Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
opcode_split_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
opcode_table_get_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
operand_capabilities_test.cpp Adjust tests according to grammar change 2018-05-10 16:32:59 -04:00
operand_pattern_test.cpp Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
operand_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
operand-class-test-coverage.csv Fix operand class test coverage table. 2016-09-23 11:58:25 -04:00
parse_number_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
preserve_numeric_ids_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
software_version_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
string_utils_test.cpp Validator checks if operands require extension 2017-03-14 13:39:43 -04:00
target_env_test.cpp Support SPIR-V 1.3 and Vulkan 1.1 2018-03-06 15:17:31 -05:00
test_fixture.h Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_advance_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_destroy_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_literal_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_start_new_inst_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_to_binary_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.annotation_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.barrier_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.constant_test.cpp hex_float: Use max_digits10 for the float precision 2018-04-03 12:53:10 -04:00
text_to_binary.control_flow_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.debug_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.device_side_enqueue_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.extension_test.cpp Test asm/dis support for SPV_EXT_descriptor_indexing 2018-04-06 13:33:34 -04:00
text_to_binary.function_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_to_binary.group_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_to_binary.image_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.literal_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
text_to_binary.memory_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.misc_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.mode_setting_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.pipe_storage_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.reserved_sampling_test.cpp Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
text_to_binary.subgroup_dispatch_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_to_binary.type_declaration_test.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text_word_get_test.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
timer_test.cpp Add --time-report to spirv-opt 2018-03-20 21:30:06 -04:00
unit_spirv.cpp Renaming test files to comply with Google style guide. 2016-11-07 14:41:51 -05:00
unit_spirv.h Support SPIR-V 1.3 and Vulkan 1.1 2018-03-06 15:17:31 -05:00