-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[analyzer] Set and display CSA analysis entry points as notes on debu…
…gging (#84823) When debugging CSA issues, sometimes it would be useful to have a dedicated note for the analysis entry point, aka. the function name you would need to pass as "-analyze-function=XYZ" to reproduce a specific issue. One way we use (or will use) this downstream is to provide tooling on top of creduce to enhance to supercharge productivity by automatically reduce cases on crashes for example. This will be added only if the "-analyzer-note-analysis-entry-points" is set or the "analyzer-display-progress" is on. This additional entry point marker will be the first "note" if enabled, with the following message: "[debug] analyzing from XYZ". They are prefixed by "[debug]" to remind the CSA developer that this is only meant to be visible for them, for debugging purposes. CPP-5012
- Loading branch information
Showing
11 changed files
with
193 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,43 @@ | ||
// RUN: %clang_analyze_cc1 -fblocks -analyzer-display-progress %s 2>&1 | FileCheck %s | ||
// RUN: %clang_analyze_cc1 -fblocks -verify %s 2>&1 \ | ||
// RUN: -analyzer-display-progress \ | ||
// RUN: -analyzer-checker=debug.ExprInspection \ | ||
// RUN: -analyzer-output=text \ | ||
// RUN: | FileCheck %s | ||
|
||
#include "Inputs/system-header-simulator-objc.h" | ||
|
||
static void f(void) {} | ||
void clang_analyzer_warnIfReached(); | ||
|
||
// expected-note@+2 {{[debug] analyzing from f}} | ||
// expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} | ||
static void f(void) { clang_analyzer_warnIfReached(); } | ||
|
||
@interface I: NSObject | ||
-(void)instanceMethod:(int)arg1 with:(int)arg2; | ||
+(void)classMethod; | ||
@end | ||
|
||
@implementation I | ||
-(void)instanceMethod:(int)arg1 with:(int)arg2 {} | ||
+(void)classMethod {} | ||
// expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} | ||
-(void)instanceMethod:(int)arg1 with:(int)arg2 { clang_analyzer_warnIfReached(); } | ||
|
||
// expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} | ||
+(void)classMethod { clang_analyzer_warnIfReached(); } | ||
@end | ||
|
||
// expected-note@+1 3 {{[debug] analyzing from g}} | ||
void g(I *i, int x, int y) { | ||
[I classMethod]; | ||
[i instanceMethod: x with: y]; | ||
[I classMethod]; // expected-note {{Calling 'classMethod'}} | ||
[i instanceMethod: x with: y]; // expected-note {{Calling 'instanceMethod:with:'}} | ||
|
||
void (^block)(void); | ||
block = ^{}; | ||
block(); | ||
// expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} | ||
block = ^{ clang_analyzer_warnIfReached(); }; | ||
block(); // expected-note {{Calling anonymous block}} | ||
} | ||
|
||
// CHECK: analyzer-display-progress.m f | ||
// CHECK: analyzer-display-progress.m -[I instanceMethod:with:] | ||
// CHECK: analyzer-display-progress.m +[I classMethod] | ||
// CHECK: analyzer-display-progress.m g | ||
// CHECK: analyzer-display-progress.m block (line: 22, col: 11) | ||
// CHECK: analyzer-display-progress.m block (line: 35, col: 11) |
Oops, something went wrong.