dawn_node: Add message support to UNIMPLEMENTED()

Have UNIMPLEMENTED() take a variadic set of message arguments which are printed with the fatal error message.

Bug: dawn:1123
Change-Id: Idfa7ca71a8c59565434651a310d9e049349bb227
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/65400
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
Ben Clayton 2021-09-30 13:09:24 +00:00 committed by Dawn LUCI CQ
parent 7ed0624337
commit 7c9294584e
1 changed files with 18 additions and 6 deletions

View File

@ -17,6 +17,7 @@
#include <iostream>
#include <optional>
#include <sstream>
#include <unordered_map>
#include <variant>
#include <vector>
@ -101,12 +102,22 @@ namespace wgpu { namespace utils {
}
// Unimplemented() prints an 'UNIMPLEMENTED' message to stdout with the given
// file, line and function, then calls abort().
// file, line, function and optional message, then calls abort().
// Unimplemented() is usually not called directly, but by the UNIMPLEMENTED()
// macro below.
[[noreturn]] inline void Unimplemented(const char* file, int line, const char* function) {
std::cout << file << ":" << line << ": "
<< "UNIMPLEMENTED : " << function << std::endl;
template <typename... MSG_ARGS>
[[noreturn]] inline void Unimplemented(const char* file,
int line,
const char* function,
MSG_ARGS&&... msg_args) {
std::stringstream msg;
msg << file << ":" << line << ": "
<< "UNIMPLEMENTED: " << function << "()";
if constexpr (sizeof...(msg_args)) {
msg << " ";
Write(msg, std::forward<MSG_ARGS>(msg_args)...);
}
std::cout << msg.str() << std::endl;
abort();
}
@ -118,10 +129,11 @@ namespace wgpu { namespace utils {
<< std::endl
// UNIMPLEMENTED() prints 'UNIMPLEMENTED' with the current file, line and
// function to stdout, then calls abort().
// function to stdout, along with the optional message, then calls abort().
// The macro calls Unimplemented(), which is annotated with [[noreturn]].
// Used to stub code that has not yet been implemented.
#define UNIMPLEMENTED() ::wgpu::utils::Unimplemented(__FILE__, __LINE__, __FUNCTION__)
#define UNIMPLEMENTED(...) \
::wgpu::utils::Unimplemented(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
}} // namespace wgpu::utils