// RUN: clang-tidy %s -checks='-*,hicpp-signed-bitwise' -- -std=c++11 #include "hicpp-signed-bitwise-standard-types.h" void pure_bitmask_types() { // std::locale::category int SResult = 0; std::locale::category C = std::locale::category::ctype; SResult = std::locale::category::none | std::locale::category::collate; SResult|= std::locale::category::collate; SResult = std::locale::category::ctype & std::locale::category::monetary; SResult&= std::locale::category::monetary; SResult = std::locale::category::numeric ^ std::locale::category::time; SResult^= std::locale::category::time; SResult = std::locale::category::messages | std::locale::category::all; SResult = std::locale::category::all & C; SResult&= std::locale::category::all; SResult = std::locale::category::all | C; SResult|= std::locale::category::all; SResult = std::locale::category::all ^ C; SResult^= std::locale::category::all; // std::ctype_base::mask std::ctype_base::mask M = std::ctype_base::mask::punct; SResult = std::ctype_base::mask::space | std::ctype_base::mask::print; SResult = std::ctype_base::mask::cntrl & std::ctype_base::mask::upper; SResult = std::ctype_base::mask::lower ^ std::ctype_base::mask::alpha; SResult|= std::ctype_base::mask::digit | std::ctype_base::mask::punct; SResult&= std::ctype_base::mask::xdigit & std::ctype_base::mask::alnum; SResult^= std::ctype_base::mask::alnum ^ std::ctype_base::mask::graph; SResult&= std::ctype_base::mask::space & M; SResult|= std::ctype_base::mask::space | M; SResult^= std::ctype_base::mask::space ^ M; // std::ios_base::fmtflags std::ios_base::fmtflags F = std::ios_base::fmtflags::floatfield; SResult = std::ios_base::fmtflags::dec | std::ios_base::fmtflags::oct; SResult = std::ios_base::fmtflags::hex & std::ios_base::fmtflags::basefield; SResult = std::ios_base::fmtflags::left ^ std::ios_base::fmtflags::right; SResult|= std::ios_base::fmtflags::internal | std::ios_base::fmtflags::adjustfield; SResult&= std::ios_base::fmtflags::scientific & std::ios_base::fmtflags::fixed; SResult^= std::ios_base::fmtflags::floatfield ^ std::ios_base::fmtflags::boolalpha; SResult = std::ios_base::fmtflags::showbase | std::ios_base::fmtflags::showpoint; SResult = std::ios_base::fmtflags::showpos & std::ios_base::fmtflags::skipws; SResult = std::ios_base::fmtflags::unitbuf ^ std::ios_base::fmtflags::uppercase; SResult|= std::ios_base::fmtflags::unitbuf | F; SResult&= std::ios_base::fmtflags::unitbuf & F; SResult^= std::ios_base::fmtflags::unitbuf ^ F; // std::ios_base::iostate std::ios_base::iostate S = std::ios_base::iostate::goodbit; SResult^= std::ios_base::iostate::goodbit | std::ios_base::iostate::badbit; SResult|= std::ios_base::iostate::failbit & std::ios_base::iostate::eofbit; SResult&= std::ios_base::iostate::failbit ^ std::ios_base::iostate::eofbit; SResult = std::ios_base::iostate::goodbit | S; SResult = std::ios_base::iostate::goodbit & S; SResult = std::ios_base::iostate::goodbit ^ S; // std::ios_base::openmode std::ios_base::openmode B = std::ios_base::openmode::binary; SResult = std::ios_base::openmode::app | std::ios_base::openmode::binary; SResult = std::ios_base::openmode::in & std::ios_base::openmode::out; SResult = std::ios_base::openmode::trunc ^ std::ios_base::openmode::ate; SResult&= std::ios_base::openmode::trunc | B; SResult^= std::ios_base::openmode::trunc & B; SResult|= std::ios_base::openmode::trunc ^ B; } void still_forbidden() { // std::locale::category unsigned int UResult = 0u; int SResult = 0; SResult = std::ctype_base::mask::print ^ 8u; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult = std::ctype_base::mask::cntrl | 8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult = std::ctype_base::mask::upper & 8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult = std::ctype_base::mask::lower ^ -8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator // Staying within the allowed standard types is ok for bitwise assignment // operations. std::ctype_base::mask var = std::ctype_base::mask::print; SResult<<= std::ctype_base::mask::upper; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult>>= std::ctype_base::mask::upper; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult &= std::ctype_base::mask::upper; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult |= std::ctype_base::mask::upper; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator SResult ^= std::ctype_base::mask::upper; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::locale::category::collate << 1u; UResult = std::locale::category::ctype << 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::locale::category::monetary >> 1u; UResult = std::locale::category::numeric >> 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = ~std::locale::category::messages; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator SResult = ~std::locale::category::all; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator // std::ctype_base::mask UResult = std::ctype_base::mask::space | 8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ctype_base::mask::print & 8u; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ctype_base::mask::cntrl ^ -8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ctype_base::mask::upper << 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ctype_base::mask::lower << 1u; UResult = std::ctype_base::mask::alpha >> 1u; UResult = std::ctype_base::mask::digit >> 1u; UResult = ~std::ctype_base::mask::punct; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator SResult = ~std::ctype_base::mask::xdigit; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator // std::ios_base::fmtflags UResult = std::ios_base::fmtflags::dec | 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::fmtflags::oct & 1u; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::fmtflags::hex ^ -1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::fmtflags::basefield >> 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::fmtflags::left >> 1u; UResult = std::ios_base::fmtflags::right << 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::fmtflags::internal << 1u; UResult = ~std::ios_base::fmtflags::adjustfield; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator SResult = ~std::ios_base::fmtflags::scientific; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator // std::ios_base::iostate UResult = std::ios_base::iostate::goodbit | 8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::iostate::badbit & 8u; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::iostate::failbit ^ -8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::iostate::eofbit << 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::iostate::goodbit << 1u; UResult = std::ios_base::iostate::badbit >> 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::iostate::failbit >> 1u; UResult = ~std::ios_base::iostate::eofbit; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator SResult = ~std::ios_base::iostate::goodbit; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator // std::ios_base::openmode UResult = std::ios_base::app | 8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::binary & 8u; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::in ^ -8; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::out >> 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::trunc >> 1u; UResult = std::ios_base::ate << 1; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a binary bitwise operator UResult = std::ios_base::ate << 1u; UResult = ~std::ios_base::openmode::app; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator SResult = ~std::ios_base::openmode::binary; // CHECK-MESSAGES: [[@LINE-1]]:13: warning: use of a signed integer operand with a unary bitwise operator }