Author: dergachev Date: Mon Jul 30 16:44:37 2018 New Revision: 338333 URL: http://llvm.org/viewvc/llvm-project?rev=338333&view=rev Log: [analyzer] CStringChecker: Remember to highlight the argument expression range.
When emitting a bug report, it is important to highlight which argument of the call-expression is causing the problem. Before: warning: Null pointer argument in call to string comparison function strcmp(a, b); ^~~~~~~~~~~~ After: warning: Null pointer argument in call to string comparison function strcmp(a, b); ^ ~ Affects other output modes as well, not just text. Differential Revision: https://reviews.llvm.org/D50028 Added: cfe/trunk/test/Analysis/cstring-ranges.c Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CStringChecker.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CStringChecker.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/CStringChecker.cpp?rev=338333&r1=338332&r2=338333&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/CStringChecker.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/CStringChecker.cpp Mon Jul 30 16:44:37 2018 @@ -552,6 +552,7 @@ void CStringChecker::emitNullArgBug(Chec BuiltinBug *BT = static_cast<BuiltinBug *>(BT_Null.get()); auto Report = llvm::make_unique<BugReport>(*BT, WarningMsg, N); + Report->addRange(S->getSourceRange()); bugreporter::trackNullOrUndefValue(N, S, *Report); C.emitReport(std::move(Report)); } Added: cfe/trunk/test/Analysis/cstring-ranges.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/cstring-ranges.c?rev=338333&view=auto ============================================================================== --- cfe/trunk/test/Analysis/cstring-ranges.c (added) +++ cfe/trunk/test/Analysis/cstring-ranges.c Mon Jul 30 16:44:37 2018 @@ -0,0 +1,15 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=unix.cstring -analyzer-output=text %s 2>&1 | FileCheck %s + +// This test verifies argument source range highlighting. +// Otherwise we've no idea which of the arguments is null. + +char *strcpy(char *, const char *); + +void foo() { + char *a = 0, *b = 0; + strcpy(a, b); +} + +// CHECK: warning: Null pointer argument in call to string copy function +// CHECK-NEXT: strcpy(a, b); +// CHECK-NEXT: ^ ~ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits