From 6d0c2f72536974d0ec68398052b546ca5e190e52 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sun, 31 Jan 2016 10:39:35 +0100 Subject: [PATCH] Fixed false positive useClosedFile when noreturn function is called (#7359) --- lib/checkio.cpp | 2 +- test/testio.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/checkio.cpp b/lib/checkio.cpp index bf9e144c9..4030deb29 100644 --- a/lib/checkio.cpp +++ b/lib/checkio.cpp @@ -148,7 +148,7 @@ void CheckIO::checkFileUsage() i->second.lastOperation = Filepointer::UNKNOWN_OP; } } - } else if (tok->str() == "return" || tok->str() == "continue" || tok->str() == "break") { // Reset upon return, continue or break + } else if (tok->str() == "return" || tok->str() == "continue" || tok->str() == "break" || _settings->library.isnoreturn(tok)) { // Reset upon return, continue or break for (std::map::iterator i = filepointers.begin(); i != filepointers.end(); ++i) { i->second.mode_indent = 0; i->second.mode = UNKNOWN_OM; diff --git a/test/testio.cpp b/test/testio.cpp index 6de795af4..7e30da95b 100644 --- a/test/testio.cpp +++ b/test/testio.cpp @@ -480,6 +480,18 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + check("void chdcd_parse_nero(FILE *infile) {\n" + " switch (mode) {\n" + " case 0x0300:\n" + " fclose(infile);\n" + " exit(0);\n" + " case 0x0500:\n" + " fclose(infile);\n" + " return;\n" + " }\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // #4649 check("void foo() {\n" " struct {FILE *f1; FILE *f2;} a;\n"