Examples of errors detected by the V716 diagnostic
V716. Suspicious type conversion: HRESULT -> BOOL (BOOL -> HRESULT).
Xenia
V716 Suspicious type conversion: bool -> HRESULT. A cast is performed between semantically different types. d3d12_command_processor.cc 2649
void D3D12CommandProcessor::CheckSubmissionFence(....) { .... if (SUCCEEDED( direct_queue->Signal(queue_operations_since_submission_fence_, fence_value) && SUCCEEDED(queue_operations_since_submission_fence_ ->SetEventOnCompletion(fence_value, fence_completion_event_)))) { WaitForSingleObject(fence_completion_event_, INFINITE); queue_operations_done_since_submission_signal_ = false; } .... } Developers might simply have misplaced the parentheses.
Command & Conquer
V716 Suspicious type conversion in assign expression: 'HRESULT = BOOL'. GBUFFER.H 780
BOOL __cdecl Linear_Blit_To_Linear(...); inline HRESULT GraphicViewPortClass::Blit(....) { HRESULT return_code=0; .... return_code=(Linear_Blit_To_Linear(this, &dest, x_pixel, y_pixel , dx_pixel, dy_pixel , pixel_width, pixel_height, trans)); .... return ( return_code ); } Similar errors can be found in some other places:
- V716 Suspicious type conversion in assign expression: 'HRESULT = BOOL'. GBUFFER.H 817
- V716 Suspicious type conversion in assign expression: 'HRESULT = BOOL'. GBUFFER.H 857
- V716 Suspicious type conversion in assign expression: 'HRESULT = BOOL'. GBUFFER.H 773
- And 2 additional diagnostic messages.
LibreOffice
V716 Suspicious type conversion in return statement: returned HRESULT, but function actually returns BOOL. maccessible.cxx 2649
BOOL CMAccessible::get_IAccessibleFromXAccessible(....) { ENTER_PROTECTED_BLOCK // #CHECK# if(ppIA == nullptr) { return E_INVALIDARG; // <= } BOOL isGet = FALSE; if(g_pAgent) isGet = g_pAgent->GetIAccessibleFromXAccessible(....); if(isGet) return TRUE; else return FALSE; LEAVE_PROTECTED_BLOCK } Similar errors can be found in some other places:
- V716 Suspicious type conversion in return statement: returned HRESULT, but function actually returns BOOL. inprocembobj.cxx 1299
- V716 Suspicious type conversion in return statement: returned HRESULT, but function actually returns BOOL. maccessible.cxx 2660
Dolphin Smalltalk 7
V716 Suspicious type conversion in return statement: returned BOOL, but function actually returns HRESULT. idolphinstart.cpp 78
#define STDMETHODIMP HRESULT STDMETHODCALLTYPE STDMETHODIMP CDolphinSmalltalk::GetVersionInfo(LPVOID pvi) { extern BOOL __stdcall GetVersionInfo(VS_FIXEDFILEINFO* ....); return ::GetVersionInfo(static_cast<VS_FIXEDFILEINFO*>(pvi)); } Wine Is Not an Emulator
V716 Suspicious type conversion in return statement: returned HRESULT, but function actually returns BOOL. ordinal.c 5198
#define E_INVALIDARG _HRESULT_TYPEDEF_(0x80070057) BOOL WINAPI SHPropertyBag_ReadLONG(....) { VARIANT var; HRESULT hr; TRACE("%p %s %p\n", ppb,debugstr_w(pszPropName),pValue); if (!pszPropName || !ppb || !pValue) return E_INVALIDARG; V_VT(&var) = VT_I4; hr = IPropertyBag_Read(ppb, pszPropName, &var, NULL); if (SUCCEEDED(hr)) { if (V_VT(&var) == VT_I4) *pValue = V_I4(&var); else hr = DISP_E_BADVARTYPE; } return hr; } LibreOffice
V716 Suspicious type conversion: BOOL -> HRESULT. updatecheckconfig.cxx 193
BOOL SHGetSpecialFolderPath( HWND hwndOwner, _Out_ LPTSTR lpszPath, _In_ int csidl, _In_ BOOL fCreate ); #define FAILED(hr) (((HRESULT)(hr)) < 0) OUString UpdateCheckConfig::getDesktopDirectory() { .... if( ! FAILED( SHGetSpecialFolderPathW( .... ) ) ) .... } Similar errors can be found in some other places:
- V716 Suspicious type conversion: BOOL -> HRESULT. updatecheckconfig.cxx 222