[Openmp-commits] [openmp] r291764 - kmp_affinity: Fix check if specific bit is set
Jonas Hahnfeld via Openmp-commits
openmp-commits at lists.llvm.org
Thu Jan 12 03:39:04 PST 2017
Author: hahnfeld
Date: Thu Jan 12 05:39:04 2017
New Revision: 291764
URL: http://llvm.org/viewvc/llvm-project?rev=291764&view=rev
Log:
kmp_affinity: Fix check if specific bit is set
Clang 4.0 trunk warns:
warning: logical not is only applied to the left hand side of this bitwise operator [-Wlogical-not-parentheses]
This points to a potential bug if the code really wants to check if the single
bit is not set: If for example (buf.edx >> 9) = 2 (has any bit set except the
least significant one), 'logical not' will return 0 which stays 0 after the
'bitwise and'.
To do this correctly we first need to evaluate the 'bitwise and'. In that case
it returns 2 & 1 = 0 which after the 'logical not' evaluates to 1.
Differential Revision: https://reviews.llvm.org/D28599
Modified:
openmp/trunk/runtime/src/kmp_affinity.cpp
Modified: openmp/trunk/runtime/src/kmp_affinity.cpp
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_affinity.cpp?rev=291764&r1=291763&r2=291764&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_affinity.cpp (original)
+++ openmp/trunk/runtime/src/kmp_affinity.cpp Thu Jan 12 05:39:04 2017
@@ -1022,7 +1022,7 @@ __kmp_affinity_create_apicid_map(AddrUns
// The apic id and max threads per pkg come from cpuid(1).
//
__kmp_x86_cpuid(1, 0, &buf);
- if (! (buf.edx >> 9) & 1) {
+ if (((buf.edx >> 9) & 1) == 0) {
__kmp_set_system_affinity(oldMask, TRUE);
__kmp_free(threadInfo);
KMP_CPU_FREE(oldMask);
More information about the Openmp-commits
mailing list