Skip to content

Commit

Permalink
Cast ::GetLastError to int (#57113)
Browse files Browse the repository at this point in the history
`GetLastError` returns an unsigned 32 bit integer that was being
implicitly cast to an int for the std::variant<..., int>. This was
causing my build to fail with:

```
../../flutter/shell/platform/windows/platform_handler.cc(178,12): error: no viable conversion from returned value of type 'DWORD' (aka 'unsigned long') to function return type 'std::variant<std::wstring, int>' (aka 'variant<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>, int>')
  178 |     return ::GetLastError();
      |            ^~~~~~~~~~~~~~~~
../../../../../../../Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.42.34433/include\variant(923,7): note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'DWORD' (aka 'unsigned long') to 'const variant<basic_string<wchar_t>, int> &' for 1st argument
  923 | class variant : private _SMF_control<_Variant_destroy_layer<_Types...>, _Types...> { // discriminated union
      |       ^~~~~~~
```

Commands:

```
 ./flutter/tools/gn --runtime-mode release --no-rbe
ninja -C .\out\host_release windows gen_snapshot flutter/build/archives:windows_flutter
```

Explicitly casting `::GetLastError` to an int fixes this issue.

I'm running on Windows 11 (Version 10.0.26100 Build 26100) with VS 2022
Community Edition.

@loic-sharma

Co-authored-by: Eric Seidel <[email protected]>
  • Loading branch information
bryanoltman and eseidel authored Dec 12, 2024
1 parent d7d3fa7 commit 847deb2
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions shell/platform/windows/platform_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@ class ScopedGlobalMemory {
memory_ = ::GlobalAlloc(flags, bytes);
if (!memory_) {
FML_LOG(ERROR) << "Unable to allocate global memory: "
<< ::GetLastError();
<< static_cast<int>(::GetLastError());
}
}

~ScopedGlobalMemory() {
if (memory_) {
if (::GlobalFree(memory_) != nullptr) {
FML_LOG(ERROR) << "Failed to free global allocation: "
<< ::GetLastError();
<< static_cast<int>(::GetLastError());
}
}
}
Expand Down Expand Up @@ -175,12 +175,12 @@ std::variant<std::wstring, int> ScopedClipboard::GetString() {

HANDLE data = ::GetClipboardData(CF_UNICODETEXT);
if (data == nullptr) {
return ::GetLastError();
return static_cast<int>(::GetLastError());
}
ScopedGlobalLock locked_data(data);

if (!locked_data.get()) {
return ::GetLastError();
return static_cast<int>(::GetLastError());
}
return static_cast<wchar_t*>(locked_data.get());
}
Expand Down

0 comments on commit 847deb2

Please sign in to comment.