diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index bf9b772b1..a19d64273 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1226,7 +1226,7 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const Variable& var if (_tokenizer->IsScopeNoReturn(tok)) { if (noreturn) *noreturn = true; - return true; + return false; } break; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 155340afe..473df0a3c 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2112,6 +2112,16 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVarB("int foo(int a) {\n" // #4880 + " int x;\n" + " if (a==1)\n" + " g(1);\n" // might be a noreturn function + " if (a==17)\n" + " g(2);\n" // might be a noreturn function + " return x;\n" + "}"); + ASSERT_EQUALS("[test.cpp:7]: (error) Uninitialized variable: x\n", errout.str()); + checkUninitVarB("void (*init)(char *str);\n" "\n" "char x() {\n"