diff --git a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp --- a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp @@ -404,7 +404,7 @@ if (!ChecksEnabled[CK_StdCLibraryFunctionArgsChecker]) return; // FIXME Add detailed diagnostic. - std::string Msg = "Function argument constraint is not satisfied"; + StringRef Msg = "Function argument constraint is not satisfied"; auto R = std::make_unique(BT, Msg, N); bugreporter::trackExpressionValue(N, Call.getArgExpr(0), *R); C.emitReport(std::move(R)); @@ -415,8 +415,7 @@ ProgramStateRef FailureSt = VR.negate().apply(State, Call, Summary); // The argument constraint is not satisfied. if (FailureSt && !SuccessSt) { - C.addTransition(FailureSt); - if (ExplodedNode *N = C.generateErrorNode(FailureSt)) + if (ExplodedNode *N = C.generateErrorNode(State)) Report(N); break; } else { diff --git a/clang/test/Analysis/std-c-library-functions-arg-constraints.c b/clang/test/Analysis/std-c-library-functions-arg-constraints.c --- a/clang/test/Analysis/std-c-library-functions-arg-constraints.c +++ b/clang/test/Analysis/std-c-library-functions-arg-constraints.c @@ -37,10 +37,8 @@ y = 0; clang_analyzer_eval(EOF <= x && x <= 255); // expected-warning{{TRUE}} - if (x > 255) { // This path is no longer feasible. - ret = isalnum(x); + if (x > 255) // This path is no longer feasible. ret = x / y; // No warning here - } ret = x / y; // expected-warning{{Division by zero}} }