Fixes zealous MSVC static analyzers warnings (#3938)

Other unfixed as I'm not happy with caving to false positives of every analyzers.
This commit is contained in:
ocornut 2021-03-18 16:10:25 +01:00
parent 0c5b0c8b97
commit 412d6f7efe
3 changed files with 23 additions and 14 deletions

View File

@ -193,6 +193,7 @@ static bool ImGui_ImplWin32_UpdateMouseCursor()
static void ImGui_ImplWin32_UpdateMousePos() static void ImGui_ImplWin32_UpdateMousePos()
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
IM_ASSERT(g_hWnd != 0);
// Set OS mouse position if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) // Set OS mouse position if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user)
if (io.WantSetMousePos) if (io.WantSetMousePos)

View File

@ -1133,11 +1133,18 @@ void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c)
if (InputQueueSurrogate != 0) if (InputQueueSurrogate != 0)
{ {
if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate
{
InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID); InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID);
else if (IM_UNICODE_CODEPOINT_MAX == (0xFFFF)) // Codepoint will not fit in ImWchar (extra parenthesis around 0xFFFF somehow fixes -Wunreachable-code with Clang) }
cp = IM_UNICODE_CODEPOINT_INVALID;
else else
{
#if IM_UNICODE_CODEPOINT_MAX == 0xFFFF
cp = IM_UNICODE_CODEPOINT_INVALID; // Codepoint will not fit in ImWchar
#else
cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000); cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000);
#endif
}
InputQueueSurrogate = 0; InputQueueSurrogate = 0;
} }
InputQueueCharacters.push_back(cp); InputQueueCharacters.push_back(cp);

View File

@ -2678,18 +2678,19 @@ void ImGui::TableSortSpecsBuild(ImGuiTable* table)
// Write output // Write output
table->SortSpecsMulti.resize(table->SortSpecsCount <= 1 ? 0 : table->SortSpecsCount); table->SortSpecsMulti.resize(table->SortSpecsCount <= 1 ? 0 : table->SortSpecsCount);
ImGuiTableColumnSortSpecs* sort_specs = (table->SortSpecsCount == 0) ? NULL : (table->SortSpecsCount == 1) ? &table->SortSpecsSingle : table->SortSpecsMulti.Data; ImGuiTableColumnSortSpecs* sort_specs = (table->SortSpecsCount == 0) ? NULL : (table->SortSpecsCount == 1) ? &table->SortSpecsSingle : table->SortSpecsMulti.Data;
for (int column_n = 0; column_n < table->ColumnsCount; column_n++) if (sort_specs != NULL)
{ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
ImGuiTableColumn* column = &table->Columns[column_n]; {
if (column->SortOrder == -1) ImGuiTableColumn* column = &table->Columns[column_n];
continue; if (column->SortOrder == -1)
IM_ASSERT(column->SortOrder < table->SortSpecsCount); continue;
ImGuiTableColumnSortSpecs* sort_spec = &sort_specs[column->SortOrder]; IM_ASSERT(column->SortOrder < table->SortSpecsCount);
sort_spec->ColumnUserID = column->UserID; ImGuiTableColumnSortSpecs* sort_spec = &sort_specs[column->SortOrder];
sort_spec->ColumnIndex = (ImGuiTableColumnIdx)column_n; sort_spec->ColumnUserID = column->UserID;
sort_spec->SortOrder = (ImGuiTableColumnIdx)column->SortOrder; sort_spec->ColumnIndex = (ImGuiTableColumnIdx)column_n;
sort_spec->SortDirection = column->SortDirection; sort_spec->SortOrder = (ImGuiTableColumnIdx)column->SortOrder;
} sort_spec->SortDirection = column->SortDirection;
}
table->SortSpecs.Specs = sort_specs; table->SortSpecs.Specs = sort_specs;
table->SortSpecs.SpecsCount = table->SortSpecsCount; table->SortSpecs.SpecsCount = table->SortSpecsCount;
table->SortSpecs.SpecsDirty = true; // Mark as dirty for user table->SortSpecs.SpecsDirty = true; // Mark as dirty for user