Skip to content

Commit

Permalink
[openmp] Fix warnings when building on Windows with latest MSVC or Cl…
Browse files Browse the repository at this point in the history
…ang ToT (#77853)

There were quite a few compilation warnings when building openmp on Windows with
the latest Visual Studios 2022 version 17.8.4. Some other warnings were visible
with the latest Clang at tip. This commit fixes all of them.
  • Loading branch information
aganea committed Jan 23, 2024
1 parent 55f1229 commit 10f3296
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 34 deletions.
9 changes: 9 additions & 0 deletions openmp/cmake/HandleOpenMPOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,12 @@ append_if(OPENMP_HAVE_WMAYBE_UNINITIALIZED_FLAG "-Wno-maybe-uninitialized" CMAKE
append_if(OPENMP_HAVE_NO_SEMANTIC_INTERPOSITION "-fno-semantic-interposition" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(OPENMP_HAVE_FUNCTION_SECTIONS "-ffunction-section" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(OPENMP_HAVE_DATA_SECTIONS "-fdata-sections" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)

if (MSVC)
# Disable "warning C4201: nonstandard extension used: nameless struct/union"
append("-wd4201" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)

# Disable "warning C4190: '__kmpc_atomic_cmplx8_rd' has C-linkage specified, but returns
# UDT '__kmp_cmplx64_t' which is incompatible with C"
append("-wd4190" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
27 changes: 20 additions & 7 deletions openmp/runtime/src/kmp_affinity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
#endif
#include <ctype.h>

#include "llvm/Support/Compiler.h"

// The machine topology
kmp_topology_t *__kmp_topology = nullptr;
// KMP_HW_SUBSET environment variable
Expand Down Expand Up @@ -127,8 +129,12 @@ const char *__kmp_hw_get_catalog_string(kmp_hw_t type, bool plural) {
return ((plural) ? KMP_I18N_STR(Threads) : KMP_I18N_STR(Thread));
case KMP_HW_PROC_GROUP:
return ((plural) ? KMP_I18N_STR(ProcGroups) : KMP_I18N_STR(ProcGroup));
case KMP_HW_UNKNOWN:
case KMP_HW_LAST:
return KMP_I18N_STR(Unknown);
}
return KMP_I18N_STR(Unknown);
KMP_ASSERT2(false, "Unhandled kmp_hw_t enumeration");
LLVM_BUILTIN_UNREACHABLE;
}

const char *__kmp_hw_get_keyword(kmp_hw_t type, bool plural) {
Expand Down Expand Up @@ -157,13 +163,18 @@ const char *__kmp_hw_get_keyword(kmp_hw_t type, bool plural) {
return ((plural) ? "threads" : "thread");
case KMP_HW_PROC_GROUP:
return ((plural) ? "proc_groups" : "proc_group");
case KMP_HW_UNKNOWN:
case KMP_HW_LAST:
return ((plural) ? "unknowns" : "unknown");
}
return ((plural) ? "unknowns" : "unknown");
KMP_ASSERT2(false, "Unhandled kmp_hw_t enumeration");
LLVM_BUILTIN_UNREACHABLE;
}

const char *__kmp_hw_get_core_type_string(kmp_hw_core_type_t type) {
switch (type) {
case KMP_HW_CORE_TYPE_UNKNOWN:
case KMP_HW_MAX_NUM_CORE_TYPES:
return "unknown";
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
case KMP_HW_CORE_TYPE_ATOM:
Expand All @@ -172,7 +183,8 @@ const char *__kmp_hw_get_core_type_string(kmp_hw_core_type_t type) {
return "Intel(R) Core(TM) processor";
#endif
}
return "unknown";
KMP_ASSERT2(false, "Unhandled kmp_hw_core_type_t enumeration");
LLVM_BUILTIN_UNREACHABLE;
}

#if KMP_AFFINITY_SUPPORTED
Expand Down Expand Up @@ -1238,17 +1250,18 @@ bool kmp_topology_t::filter_hw_subset() {
struct core_type_indexer {
int operator()(const kmp_hw_thread_t &t) const {
switch (t.attrs.get_core_type()) {
case KMP_HW_CORE_TYPE_UNKNOWN:
case KMP_HW_MAX_NUM_CORE_TYPES:
return 0;
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
case KMP_HW_CORE_TYPE_ATOM:
return 1;
case KMP_HW_CORE_TYPE_CORE:
return 2;
#endif
case KMP_HW_CORE_TYPE_UNKNOWN:
return 0;
}
KMP_ASSERT(0);
return 0;
KMP_ASSERT2(false, "Unhandled kmp_hw_thread_t enumeration");
LLVM_BUILTIN_UNREACHABLE;
}
};
struct core_eff_indexer {
Expand Down
8 changes: 4 additions & 4 deletions openmp/runtime/src/kmp_barrier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2403,11 +2403,11 @@ void __kmp_fork_barrier(int gtid, int tid) {
#if USE_ITT_BUILD
void *itt_sync_obj = NULL;
#endif /* USE_ITT_BUILD */
#ifdef KMP_DEBUG
if (team)

KA_TRACE(10, ("__kmp_fork_barrier: T#%d(%d:%d) has arrived\n", gtid,
(team != NULL) ? team->t.t_id : -1, tid));

KA_TRACE(10, ("__kmp_fork_barrier: T#%d(%d:%d) has arrived\n", gtid,
(team != NULL) ? team->t.t_id : -1, tid));
#endif
// th_team pointer only valid for primary thread here
if (KMP_MASTER_TID(tid)) {
#if USE_ITT_BUILD && USE_ITT_NOTIFY
Expand Down
19 changes: 0 additions & 19 deletions openmp/runtime/src/kmp_io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,24 +50,6 @@ static HANDLE __kmp_stderr = NULL;
static int __kmp_console_exists = FALSE;
static kmp_str_buf_t __kmp_console_buf;

static int is_console(void) {
char buffer[128];
DWORD rc = 0;
DWORD err = 0;
// Try to get console title.
SetLastError(0);
// GetConsoleTitle does not reset last error in case of success or short
// buffer, so we need to clear it explicitly.
rc = GetConsoleTitle(buffer, sizeof(buffer));
if (rc == 0) {
// rc == 0 means getting console title failed. Let us find out why.
err = GetLastError();
// err == 0 means buffer too short (we suppose console exists).
// In Window applications we usually have err == 6 (invalid handle).
}
return rc > 0 || err == 0;
}

void __kmp_close_console(void) {
/* wait until user presses return before closing window */
/* TODO only close if a window was opened */
Expand All @@ -84,7 +66,6 @@ void __kmp_close_console(void) {
static void __kmp_redirect_output(void) {
__kmp_acquire_bootstrap_lock(&__kmp_console_lock);

(void)is_console;
if (!__kmp_console_exists) {
HANDLE ho;
HANDLE he;
Expand Down
2 changes: 2 additions & 0 deletions openmp/runtime/src/kmp_os.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,8 @@ template <> struct traits_t<unsigned long long> {
!KMP_MIC)

#if KMP_OS_WINDOWS
// Don't include everything related to NT status code, we'll do that explicitly
#define WIN32_NO_STATUS
#include <windows.h>

static inline int KMP_GET_PAGE_SIZE(void) {
Expand Down
21 changes: 20 additions & 1 deletion openmp/runtime/src/kmp_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
#include "ompd-specific.h"
#endif

#include "llvm/Support/Compiler.h"

static int __kmp_env_toPrint(char const *name, int flag);

bool __kmp_env_format = 0; // 0 - old format; 1 - new format
Expand Down Expand Up @@ -873,6 +875,10 @@ static void __kmp_stg_print_wait_policy(kmp_str_buf_t *buffer, char const *name,
case library_throughput: {
value = "PASSIVE";
} break;
case library_none:
case library_serial: {
value = NULL;
} break;
}
} else {
switch (__kmp_library) {
Expand All @@ -885,6 +891,9 @@ static void __kmp_stg_print_wait_policy(kmp_str_buf_t *buffer, char const *name,
case library_throughput: {
value = "throughput";
} break;
case library_none: {
value = NULL;
} break;
}
}
if (value != NULL) {
Expand Down Expand Up @@ -2004,6 +2013,7 @@ static inline const char *
__kmp_hw_get_core_type_keyword(kmp_hw_core_type_t type) {
switch (type) {
case KMP_HW_CORE_TYPE_UNKNOWN:
case KMP_HW_MAX_NUM_CORE_TYPES:
return "unknown";
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
case KMP_HW_CORE_TYPE_ATOM:
Expand All @@ -2012,7 +2022,8 @@ __kmp_hw_get_core_type_keyword(kmp_hw_core_type_t type) {
return "intel_core";
#endif
}
return "unknown";
KMP_ASSERT2(false, "Unhandled kmp_hw_core_type_t enumeration");
LLVM_BUILTIN_UNREACHABLE;
}

#if KMP_AFFINITY_SUPPORTED
Expand Down Expand Up @@ -4428,6 +4439,10 @@ static void __kmp_stg_print_omp_schedule(kmp_str_buf_t *buffer,
case kmp_sch_auto:
__kmp_str_buf_print(buffer, "%s,%d'\n", "auto", __kmp_chunk);
break;
default:
KMP_ASSERT2(false, "Unhandled sched_type enumeration");
LLVM_BUILTIN_UNREACHABLE;
break;
}
} else {
switch (sched) {
Expand All @@ -4453,6 +4468,10 @@ static void __kmp_stg_print_omp_schedule(kmp_str_buf_t *buffer,
case kmp_sch_auto:
__kmp_str_buf_print(buffer, "%s'\n", "auto");
break;
default:
KMP_ASSERT2(false, "Unhandled sched_type enumeration");
LLVM_BUILTIN_UNREACHABLE;
break;
}
}
} // __kmp_stg_print_omp_schedule
Expand Down
5 changes: 3 additions & 2 deletions openmp/runtime/src/kmp_wait_release.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include "ompt-specific.h"
#endif

#include "llvm/Support/Compiler.h"

/*!
@defgroup WAIT_RELEASE Wait/Release operations
Expand Down Expand Up @@ -1038,15 +1040,14 @@ static inline void __kmp_null_resume_wrapper(kmp_info_t *thr) {
case flag_oncore:
__kmp_resume_oncore(gtid, RCAST(kmp_flag_oncore *, flag));
break;
#ifdef KMP_DEBUG
case flag_unset:
KF_TRACE(100, ("__kmp_null_resume_wrapper: flag type %d is unset\n", type));
break;
default:
KF_TRACE(100, ("__kmp_null_resume_wrapper: flag type %d does not match any "
"known flag type\n",
type));
#endif
LLVM_BUILTIN_UNREACHABLE;
}
}

Expand Down
3 changes: 2 additions & 1 deletion openmp/runtime/src/z_Windows_NT_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
number of running threads in the system. */

#include <ntsecapi.h> // UNICODE_STRING
#undef WIN32_NO_STATUS
#include <ntstatus.h>
#include <psapi.h>
#ifdef _MSC_VER
Expand Down Expand Up @@ -1635,7 +1636,7 @@ int __kmp_get_load_balance(int max) {
// threads on all cores. So, we don't consider the running threads of this
// process.
if (pid != 0) {
for (int i = 0; i < num; ++i) {
for (ULONG i = 0; i < num; ++i) {
THREAD_STATE state = spi->Threads[i].State;
// Count threads that have Ready or Running state.
// !!! TODO: Why comment does not match the code???
Expand Down

0 comments on commit 10f3296

Please sign in to comment.