| // 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 |
| } |