mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-05 06:03:34 +00:00
Deep-clones all `Node`s and `Type`s into a new module. Instead of writing a million standalone tests that'll only ever test the existing fields of each type, I've opted to write the tests using wgsl<->ast<->wgsl conversion. This means the tests require the enabling of TINT_BUILD_WGSL_READER and TINT_BUILD_WGSL_WRITER, but I believe this is much easier to maintain. I'm aware there are probably gaps in the tests, and that even full coverage is likely to rapidly rot, so I've also added fuzzers/tint_ast_clone_fuzzer.cc - a fuzzer based test that ensures that all AST modules can be cloned with identical reproduction. I've run this across 100 cores of a 3990x for 4 hours, fixing the single issue it detected. Note: Expressions do not currently clone their `TypeManager` determined types. This is for two reasons: (a) This initial CL is mahoosive enough. (b) I'm uncertain whether we actually want to clone this info, or to re-run the `TypeDeterminer` after each AST transform. Maybe it should be optional. Time will tell. Fixed: tint:307 Change-Id: Id90fab06aaa740c805d12b66f3f11d1f452c6805 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/33300 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org> Reviewed-by: David Neto <dneto@google.com>
33 lines
1.1 KiB
CMake
33 lines
1.1 KiB
CMake
# Copyright 2020 The Tint Authors.
|
|
#
|
|
# 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.
|
|
|
|
function(add_tint_fuzzer NAME)
|
|
add_executable(${NAME} ${NAME}.cc)
|
|
target_link_libraries(${NAME} libtint-fuzz)
|
|
tint_default_compile_options(${NAME})
|
|
target_compile_options(${NAME} PRIVATE -Wno-missing-prototypes)
|
|
endfunction()
|
|
|
|
if (${TINT_BUILD_WGSL_READER})
|
|
add_tint_fuzzer(tint_wgsl_reader_fuzzer)
|
|
endif()
|
|
|
|
if (${TINT_BUILD_SPV_READER})
|
|
add_tint_fuzzer(tint_spv_reader_fuzzer)
|
|
endif()
|
|
|
|
if (${TINT_BUILD_WGSL_READER} AND ${TINT_BUILD_WGSL_WRITER})
|
|
add_tint_fuzzer(tint_ast_clone_fuzzer)
|
|
endif()
|