Examples of errors detected by the V716 diagnostic
V716. Suspicious type conversion: HRESULT -> BOOL (BOOL -> HRESULT).
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
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;
}
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));
}
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
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.
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.