|  | // 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()'}} | 
|  | } |