// RUN: %clang_analyze_cc1 -verify=common %s \ // RUN: -analyzer-checker=deadcode.DeadStores,debug.ExprInspection \ // RUN: -analyzer-note-analysis-entry-points // RUN: %clang_analyze_cc1 -verify=common,textout %s \ // RUN: -analyzer-checker=deadcode.DeadStores,debug.ExprInspection \ // RUN: -analyzer-note-analysis-entry-points \ // RUN: -analyzer-output=text // Test the actual source locations/ranges of entry point notes. // RUN: %clang_analyze_cc1 %s \ // RUN: -analyzer-checker=deadcode.DeadStores,debug.ExprInspection \ // RUN: -analyzer-note-analysis-entry-points \ // RUN: -analyzer-output=text 2>&1 \ // RUN: | FileCheck --strict-whitespace %s void clang_analyzer_warnIfReached(); void other() { // common-warning@+1 {{REACHABLE}} textout-note@+1 {{REACHABLE}} clang_analyzer_warnIfReached(); } struct SomeOtherStruct { // CHECK: note: [debug] analyzing from SomeOtherStruct::f() // CHECK-NEXT: | void f() { // CHECK-NEXT: | ^ // textout-note@+1 {{[debug] analyzing from SomeOtherStruct::f()}} void f() { other(); // textout-note {{Calling 'other'}} } }; // CHECK: note: [debug] analyzing from operator""_w(const char *) // CHECK-NEXT: | unsigned operator ""_w(const char*) { // CHECK-NEXT: | ^ // textout-note@+1 {{[debug] analyzing from operator""_w(const char *)}} unsigned operator ""_w(const char*) { // common-warning@+1 {{REACHABLE}} textout-note@+1 {{REACHABLE}} clang_analyzer_warnIfReached(); return 404; } // textout-note@+1 {{[debug] analyzing from checkASTCodeBodyHasAnalysisEntryPoints()}} void checkASTCodeBodyHasAnalysisEntryPoints() { int z = 1; z = 2; // common-warning@-1 {{Value stored to 'z' is never read}} // textout-note@-2 {{Value stored to 'z' is never read}} } void notInvokedLambdaScope() { // CHECK: note: [debug] analyzing from notInvokedLambdaScope()::(anonymous class)::operator()() // CHECK-NEXT: | auto notInvokedLambda = []() { // CHECK-NEXT: | ^ // textout-note@+1 {{[debug] analyzing from notInvokedLambdaScope()::(anonymous class)::operator()()}} auto notInvokedLambda = []() { // common-warning@+1 {{REACHABLE}} textout-note@+1 {{REACHABLE}} clang_analyzer_warnIfReached(); }; (void)notInvokedLambda; // Not invoking the lambda. } // CHECK: note: [debug] analyzing from invokedLambdaScope() // CHECK-NEXT: | void invokedLambdaScope() { // CHECK-NEXT: | ^ // textout-note@+1 {{[debug] analyzing from invokedLambdaScope()}} void invokedLambdaScope() { auto invokedLambda = []() { // common-warning@+1 {{REACHABLE}} textout-note@+1 {{REACHABLE}} clang_analyzer_warnIfReached(); }; invokedLambda(); // textout-note {{Calling 'operator()'}} }