diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index efa0dae39..469ff75d0 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -465,7 +465,7 @@ private: } // Used.. - if (Token::Match(tok.previous(), "[[(,+-*/=] %var% []),;+-*/]")) + if (Token::Match(tok.previous(), "[[(,+-*/|=] %var% []),;+-*/|]")) { use(checks, &tok); return &tok; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index d9b396e4f..724985df4 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -35,6 +35,7 @@ private: void run() { TEST_CASE(uninitvar1); + TEST_CASE(uninitvar_bitop); // using uninitialized operand in bit operation TEST_CASE(uninitvar_alloc); // data is allocated but not initialized TEST_CASE(uninitvar_arrays); // arrays TEST_CASE(uninitvar_class); // class/struct @@ -450,6 +451,22 @@ private: ASSERT_EQUALS("", errout.str()); } + + void uninitvar_bitop() + { + checkUninitVar("void foo() {\n" + " int b;\n" + " c = a | b;\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:3]: (error) Uninitialized variable: b\n", errout.str()); + + checkUninitVar("void foo() {\n" + " int b;\n" + " c = b | a;\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:3]: (error) Uninitialized variable: b\n", errout.str()); + } + // if.. void uninitvar_if() {