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

llvm-svn: 291764
This commit is contained in:
Jonas Hahnfeld 2017-01-12 11:39:04 +00:00
parent eff6e83f23
commit c9a8a6c030
1 changed files with 1 additions and 1 deletions

View File

@ -1022,7 +1022,7 @@ __kmp_affinity_create_apicid_map(AddrUnsPair **address2os,
// 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);