Refactor DeviceBase::APIPopErrorScope to avoid warning
In dawn-node, on linux, the compiler wrongly flags this piece
of code with the following warning
```
[1/3] Building CXX object src/dawn/native/CMakeFiles/dawn_native_objects.dir/Device.cpp.o
In file included from /usr/local/google/home/gman/src/node-webgpu/third_party/dawn/src/dawn/native/Device.h:31,
from /usr/local/google/home/gman/src/node-webgpu/third_party/dawn/src/dawn/native/Device.cpp:28:
In member function ‘_Tp std::atomic<_Tp>::load(std::memory_order) const [with _Tp = dawn::native::AsyncTaskState]’,
inlined from ‘std::atomic<_Tp>::operator _Tp() const [with _Tp = dawn::native::AsyncTaskState]’ at /usr/include/c++/15/atomic:253:20,
inlined from ‘dawn::native::AsyncTaskState dawn::native::AsyncTask::GetState() const’ at /usr/local/google/home/gman/src/node-webgpu/third_party/dawn/src/dawn/native/AsyncTask.h:71:46,
inlined from ‘virtual void dawn::native::DeviceBase::APIPopErrorScope(const WGPUPopErrorScopeCallbackInfo&)::PopErrorScopeEvent::Complete(dawn::EventCompletionType)’ at /usr/local/google/home/gman/src/node-webgpu/third_party/dawn/src/dawn/native/Device.cpp:947:44:
/usr/include/c++/15/atomic:308:22: warning: ‘unsigned char __atomic_load_1(const volatile void*, int)’ writing 1 byte into a region of size 0 overflows the destination [-Wstringop-overflow=]
308 | __atomic_load(std::__addressof(_M_i), __ptr, int(__m));
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In member function ‘virtual void dawn::native::DeviceBase::APIPopErrorScope(const WGPUPopErrorScopeCallbackInfo&)::PopErrorScopeEvent::Complete(dawn::EventCompletionType)’:
cc1plus: note: destination object is likely at address zero
```
This refactor avoids the warning and is maybe a tiny bit more efficient.
Change-Id: I46e6efae9fad1570a27ce24eb471a2db1d8d247d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/297497
Commit-Queue: Gregg Tavares <gman@chromium.org>
Auto-Submit: Gregg Tavares <gman@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index b0e9118..6430b9d 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -940,14 +940,14 @@
WGPUStringView message = kEmptyOutputStringView;
if (mScope) {
// Resolve errors from async tasks
- for (auto task : mPendingAsyncTasks) {
+ for (auto& pendingTask : mPendingAsyncTasks) {
+ ErrorGeneratingAsyncTask* task = pendingTask.task.Get();
// All the tasks should have completed unless this event was canceled.
- DAWN_ASSERT(task.task->GetState() == AsyncTaskState::Completed ||
+ DAWN_ASSERT(task->GetState() == AsyncTaskState::Completed ||
completionType != EventCompletionType::Ready);
- if (task.task->GetState() == AsyncTaskState::Completed &&
- task.task->IsError() &&
- task.captureErrorType == ToWGPUErrorType(task.task->GetErrorType())) {
- std::unique_ptr<ErrorData> error = task.task->AcquireError();
+ if (task->GetState() == AsyncTaskState::Completed && task->IsError() &&
+ pendingTask.captureErrorType == ToWGPUErrorType(task->GetErrorType())) {
+ std::unique_ptr<ErrorData> error = task->AcquireError();
mScope->CaptureError(ToWGPUErrorType(error->GetType()),
error->GetMessage());
}