| // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config c++-inlining=destructors -verify %s |
| // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config c++-inlining=destructors %s -o %t.plist |
| // RUN: FileCheck --input-file=%t.plist %s |
| |
| class Foo { |
| public: |
| static void use(int *p) { |
| *p = 1; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} |
| // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} |
| } |
| |
| Foo(int *p) { |
| use(p); |
| // expected-note@-1 {{Passing null pointer value via 1st parameter 'p'}} |
| // expected-note@-2 {{Calling 'Foo::use'}} |
| } |
| }; |
| |
| static int *globalPtr; |
| |
| class Bar { |
| public: |
| ~Bar() { |
| Foo f(globalPtr); |
| // expected-note@-1 {{Passing null pointer value via 1st parameter 'p'}} |
| // expected-note@-2 {{Calling constructor for 'Foo'}} |
| } |
| }; |
| |
| void test() { |
| Bar b; |
| globalPtr = 0; |
| // expected-note@-1 {{Null pointer value stored to 'globalPtr'}} |
| } // expected-note {{Calling '~Bar'}} |
| |
| |
| void testAnonymous() { |
| class { |
| public: |
| void method(int *p) { |
| *p = 1; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} |
| // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} |
| } |
| } anonymous; |
| |
| anonymous.method(0); |
| // expected-note@-1 {{Passing null pointer value via 1st parameter 'p'}} |
| // expected-note@-2 {{Calling 'method'}} |
| } |
| |
| // CHECK: <key>diagnostics</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>path</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>31</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>15</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>0</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Null pointer value stored to 'globalPtr'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Null pointer value stored to 'globalPtr'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>32</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>34</integer> |
| // CHECK-NEXT: <key>col</key><integer>1</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>34</integer> |
| // CHECK-NEXT: <key>col</key><integer>1</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>34</integer> |
| // CHECK-NEXT: <key>col</key><integer>1</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>depth</key><integer>0</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Calling '~Bar'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Calling '~Bar'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>23</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>depth</key><integer>1</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Entered call from 'test'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Entered call from 'test'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>23</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>23</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>19</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>19</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>1</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>19</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>24</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>1</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Calling constructor for 'Foo'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Calling constructor for 'Foo'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>12</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>depth</key><integer>2</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Entered call from '~Bar'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Entered call from '~Bar'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>12</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>12</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>9</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>2</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>13</integer> |
| // CHECK-NEXT: <key>col</key><integer>10</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>2</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Calling 'Foo::use'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Calling 'Foo::use'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>7</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>depth</key><integer>3</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Entered call from constructor for 'Foo'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Entered call from constructor for 'Foo'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>7</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>7</integer> |
| // CHECK-NEXT: <key>col</key><integer>8</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>6</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>6</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>3</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: <key>category</key><string>Logic error</string> |
| // CHECK-NEXT: <key>type</key><string>Dereference of null pointer</string> |
| // CHECK-NEXT: <key>issue_context_kind</key><string>C++ method</string> |
| // CHECK-NEXT: <key>issue_context</key><string>use</string> |
| // CHECK-NEXT: <key>issue_hash</key><string>1</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>8</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>path</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>38</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>38</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>44</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>44</integer> |
| // CHECK-NEXT: <key>col</key><integer>13</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>44</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>44</integer> |
| // CHECK-NEXT: <key>col</key><integer>13</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>11</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>20</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>0</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Passing null pointer value via 1st parameter 'p'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>3</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>46</integer> |
| // CHECK-NEXT: <key>col</key><integer>21</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>0</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Calling 'method'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Calling 'method'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>40</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>depth</key><integer>1</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Entered call from 'testAnonymous'</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Entered call from 'testAnonymous'</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>control</string> |
| // CHECK-NEXT: <key>edges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>start</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>40</integer> |
| // CHECK-NEXT: <key>col</key><integer>5</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>40</integer> |
| // CHECK-NEXT: <key>col</key><integer>8</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>end</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>kind</key><string>event</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <key>ranges</key> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <array> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>8</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>8</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>depth</key><integer>1</integer> |
| // CHECK-NEXT: <key>extended_message</key> |
| // CHECK-NEXT: <string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: <key>message</key> |
| // CHECK-NEXT: <string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |
| // CHECK-NEXT: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string> |
| // CHECK-NEXT: <key>category</key><string>Logic error</string> |
| // CHECK-NEXT: <key>type</key><string>Dereference of null pointer</string> |
| // CHECK-NEXT: <key>issue_context_kind</key><string>C++ method</string> |
| // CHECK-NEXT: <key>issue_context</key><string>method</string> |
| // CHECK-NEXT: <key>issue_hash</key><string>1</string> |
| // CHECK-NEXT: <key>location</key> |
| // CHECK-NEXT: <dict> |
| // CHECK-NEXT: <key>line</key><integer>41</integer> |
| // CHECK-NEXT: <key>col</key><integer>7</integer> |
| // CHECK-NEXT: <key>file</key><integer>0</integer> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </dict> |
| // CHECK-NEXT: </array> |