diff options
Diffstat (limited to 'test/Analysis/diagnostics')
| -rw-r--r-- | test/Analysis/diagnostics/deref-track-symbolic-region.c | 354 | ||||
| -rw-r--r-- | test/Analysis/diagnostics/deref-track-symbolic-region.cpp | 16 | ||||
| -rw-r--r-- | test/Analysis/diagnostics/undef-value-caller.c | 379 | ||||
| -rw-r--r-- | test/Analysis/diagnostics/undef-value-param.c | 1183 | ||||
| -rw-r--r-- | test/Analysis/diagnostics/undef-value-param.m | 476 |
5 files changed, 2182 insertions, 226 deletions
diff --git a/test/Analysis/diagnostics/deref-track-symbolic-region.c b/test/Analysis/diagnostics/deref-track-symbolic-region.c new file mode 100644 index 0000000000000..3ba2707f1aec6 --- /dev/null +++ b/test/Analysis/diagnostics/deref-track-symbolic-region.c @@ -0,0 +1,354 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o - | FileCheck %s + +struct S { + int *x; + int y; +}; + +int *foo(); + +void inlined(struct S *s, int m) { + if (s->x) + //expected-note@-1{{Taking false branch}} + //expected-note@-2{{Assuming pointer value is null}} + + m++; + +} +void test(struct S syz, int *pp) { + int m = 0; + syz.x = foo(); + inlined(&syz, m); + // expected-note@-1{{Calling 'inlined'}} + // expected-note@-2{{Returning from 'inlined'}} + m += *syz.x; // expected-warning{{Dereference of null pointer (loaded from field 'x')}} + // expected-note@-1{{Dereference of null pointer (loaded from field 'x')}} +} + +//CHECK: <dict> +//CHECK: <key>files</key> +//CHECK: <array> +//CHECK: </array> +//CHECK: <key>diagnostics</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>path</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>20</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>20</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>18</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Calling 'inlined'</string> +//CHECK: <key>message</key> +//CHECK: <string>Calling 'inlined'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>1</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Entered call from 'test'</string> +//CHECK: <key>message</key> +//CHECK: <string>Entered call from 'test'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>1</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>4</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>4</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>4</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>7</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>7</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>7</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>7</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>12</integer> +//CHECK: <key>col</key><integer>10</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Assuming pointer value is null</string> +//CHECK: <key>message</key> +//CHECK: <string>Assuming pointer value is null</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>18</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Returning from 'inlined'</string> +//CHECK: <key>message</key> +//CHECK: <string>Returning from 'inlined'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>22</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>13</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>13</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Dereference of null pointer (loaded from field 'x')</string> +//CHECK: <key>message</key> +//CHECK: <string>Dereference of null pointer (loaded from field 'x')</string> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>description</key><string>Dereference of null pointer (loaded from field 'x')</string> +//CHECK: <key>category</key><string>Logic error</string> +//CHECK: <key>type</key><string>Dereference of null pointer</string> +//CHECK: <key>issue_context_kind</key><string>function</string> +//CHECK: <key>issue_context</key><string>test</string> +//CHECK: <key>issue_hash</key><integer>6</integer> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>25</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </plist> diff --git a/test/Analysis/diagnostics/deref-track-symbolic-region.cpp b/test/Analysis/diagnostics/deref-track-symbolic-region.cpp new file mode 100644 index 0000000000000..fb493d7c93ae2 --- /dev/null +++ b/test/Analysis/diagnostics/deref-track-symbolic-region.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s + +struct S { + int *x; + int y; +}; + +S &getSomeReference(); +void test(S *p) { + S &r = *p; //expected-note {{Variable 'r' initialized here}} + if (p) return; + //expected-note@-1{{Taking false branch}} + //expected-note@-2{{Assuming 'p' is null}} + r.y = 5; // expected-warning {{Access to field 'y' results in a dereference of a null pointer (loaded from variable 'r')}} + // expected-note@-1{{Access to field 'y' results in a dereference of a null pointer (loaded from variable 'r')}} +} diff --git a/test/Analysis/diagnostics/undef-value-caller.c b/test/Analysis/diagnostics/undef-value-caller.c index 928839d0404da..627b334971b6f 100644 --- a/test/Analysis/diagnostics/undef-value-caller.c +++ b/test/Analysis/diagnostics/undef-value-caller.c @@ -4,235 +4,162 @@ #include "undef-value-callee.h" // This code used to cause a crash since we were not adding fileID of the header to the plist diagnostic. -// Note, in the future, we do not even need to step into this callee since it does not influence the result. + int test_calling_unimportant_callee(int argc, char *argv[]) { int x; callee(); return x; // expected-warning {{Undefined or garbage value returned to caller}} } -// CHECK: <?xml version="1.0" encoding="UTF-8"?> -// CHECK: <plist version="1.0"> -// CHECK: <dict> -// CHECK: <key>files</key> -// CHECK: <array> -// CHECK: </array> -// CHECK: <key>diagnostics</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>path</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>kind</key><string>event</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>9</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <key>ranges</key> -// CHECK: <array> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>9</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>9</integer> -// CHECK: <key>col</key><integer>7</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </array> -// CHECK: <key>depth</key><integer>0</integer> -// CHECK: <key>extended_message</key> -// CHECK: <string>Variable 'x' declared without an initial value</string> -// CHECK: <key>message</key> -// CHECK: <string>Variable 'x' declared without an initial value</string> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>control</string> -// CHECK: <key>edges</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>start</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>9</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>9</integer> -// CHECK: <key>col</key><integer>5</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: <key>end</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>8</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>event</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <key>ranges</key> -// CHECK: <array> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>10</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </array> -// CHECK: <key>depth</key><integer>0</integer> -// CHECK: <key>extended_message</key> -// CHECK: <string>Calling 'callee'</string> -// CHECK: <key>message</key> -// CHECK: <string>Calling 'callee'</string> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>event</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>2</integer> -// CHECK: <key>col</key><integer>1</integer> -// CHECK: <key>file</key><integer>1</integer> -// CHECK: </dict> -// CHECK: <key>depth</key><integer>1</integer> -// CHECK: <key>extended_message</key> -// CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> -// CHECK: <key>message</key> -// CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>event</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <key>ranges</key> -// CHECK: <array> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>10</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </array> -// CHECK: <key>depth</key><integer>1</integer> -// CHECK: <key>extended_message</key> -// CHECK: <string>Returning from 'callee'</string> -// CHECK: <key>message</key> -// CHECK: <string>Returning from 'callee'</string> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>control</string> -// CHECK: <key>edges</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>start</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>10</integer> -// CHECK: <key>col</key><integer>8</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: <key>end</key> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>8</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>kind</key><string>event</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <key>ranges</key> -// CHECK: <array> -// CHECK: <array> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>10</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>10</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </array> -// CHECK: <key>depth</key><integer>0</integer> -// CHECK: <key>extended_message</key> -// CHECK: <string>Undefined or garbage value returned to caller</string> -// CHECK: <key>message</key> -// CHECK: <string>Undefined or garbage value returned to caller</string> -// CHECK: </dict> -// CHECK: </array> -// CHECK: <key>description</key><string>Undefined or garbage value returned to caller</string> -// CHECK: <key>category</key><string>Logic error</string> -// CHECK: <key>type</key><string>Garbage return value</string> -// CHECK: <key>issue_context_kind</key><string>function</string> -// CHECK: <key>issue_context</key><string>test_calling_unimportant_callee</string> -// CHECK: <key>location</key> -// CHECK: <dict> -// CHECK: <key>line</key><integer>11</integer> -// CHECK: <key>col</key><integer>3</integer> -// CHECK: <key>file</key><integer>0</integer> -// CHECK: </dict> -// CHECK: </dict> -// CHECK: </array> -// CHECK: </dict> -// CHECK: </plist> +//CHECK: <dict> +//CHECK: <key>files</key> +//CHECK: <array> +//CHECK: </array> +//CHECK: <key>diagnostics</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>path</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>9</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>9</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>9</integer> +//CHECK: <key>col</key><integer>7</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Variable 'x' declared without an initial value</string> +//CHECK: <key>message</key> +//CHECK: <string>Variable 'x' declared without an initial value</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>9</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>9</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>10</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>10</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>10</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>10</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>8</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>10</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>10</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Undefined or garbage value returned to caller</string> +//CHECK: <key>message</key> +//CHECK: <string>Undefined or garbage value returned to caller</string> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>description</key><string>Undefined or garbage value returned to caller</string> +//CHECK: <key>category</key><string>Logic error</string> +//CHECK: <key>type</key><string>Garbage return value</string> +//CHECK: <key>issue_context_kind</key><string>function</string> +//CHECK: <key>issue_context</key><string>test_calling_unimportant_callee</string> +//CHECK: <key>issue_hash</key><integer>3</integer> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>11</integer> +//CHECK: <key>col</key><integer>3</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </plist> diff --git a/test/Analysis/diagnostics/undef-value-param.c b/test/Analysis/diagnostics/undef-value-param.c new file mode 100644 index 0000000000000..88d87cfdced3d --- /dev/null +++ b/test/Analysis/diagnostics/undef-value-param.c @@ -0,0 +1,1183 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o - | FileCheck %s + +void foo_irrelevant(int c) { + if (c) + return; + c++; + return; +} +void foo(int c, int *x) { + if (c) + //expected-note@-1{{Assuming 'c' is not equal to 0}} + //expected-note@-2{{Taking true branch}} + return; + *x = 5; +} + +int use(int c) { + int xx; //expected-note{{Variable 'xx' declared without an initial value}} + int *y = &xx; + foo (c, y); + //expected-note@-1{{Calling 'foo'}} + //expected-note@-2{{Returning from 'foo'}} + foo_irrelevant(c); + return xx+3; //expected-warning{{The left operand of '+' is a garbage value}} + //expected-note@-1{{The left operand of '+' is a garbage value}} +} + +void initArray(int x, double XYZ[3]) { + if (x <= 0) //expected-note {{Taking true branch}} + //expected-note@-1 {{Assuming 'x' is <= 0}} + return; + XYZ[0] = 1; + XYZ[1] = 1; + XYZ[2] = 1; +} +int testPassingParentRegionArray(int x) { + double XYZ[3]; + initArray(x, XYZ); //expected-note {{Calling 'initArray'}} + //expected-note@-1 {{Returning from 'initArray'}} + return 1 * XYZ[1]; //expected-warning {{The right operand of '*' is a garbage value}} + //expected-note@-1 {{The right operand of '*' is a garbage value}} +} + +double *getValidPtr(); +struct WithFields { + double *f1; +}; +void initStruct(int x, struct WithFields *X) { + if (x <= 0) //expected-note {{Taking true branch}} + //expected-note@-1 {{Assuming 'x' is <= 0}} + + return; + X->f1 = getValidPtr(); +} +double testPassingParentRegionStruct(int x) { + struct WithFields st; + st.f1 = 0; + initStruct(x, &st); //expected-note {{Calling 'initStruct'}} + //expected-note@-1 {{Returning from 'initStruct'}} + return (*st.f1); //expected-warning {{Dereference of null pointer}} + //expected-note@-1{{Dereference of null pointer (loaded from field 'f1')}} +} + +// 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>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>19</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>19</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>19</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>0</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Variable 'xx' declared without an initial value</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Variable 'xx' declared without an initial value</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>19</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>19</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>21</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>21</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>21</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>21</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>21</integer> +// CHECK-NEXT: <key>col</key><integer>14</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 'foo'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Calling '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>10</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Entered call from 'use'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Entered call from 'use'</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>10</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>10</integer> +// CHECK-NEXT: <key>col</key><integer>4</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>11</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>11</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: </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>11</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>11</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>11</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>11</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>11</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>11</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>11</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Assuming 'c' is not equal to 0</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Assuming 'c' is not equal to 0</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>11</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>11</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>14</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>14</integer> +// CHECK-NEXT: <key>col</key><integer>14</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>21</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>21</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>21</integer> +// CHECK-NEXT: <key>col</key><integer>14</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>Returning from 'foo'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Returning from '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>21</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>21</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>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>18</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>18</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>25</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>25</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: </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>25</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>25</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>25</integer> +// CHECK-NEXT: <key>col</key><integer>12</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>25</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>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>25</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>25</integer> +// CHECK-NEXT: <key>col</key><integer>12</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>25</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: </array> +// CHECK-NEXT: <key>depth</key><integer>0</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>The left operand of '+' is a garbage value</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>The left operand of '+' is a garbage value</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>description</key><string>The left operand of '+' is a garbage value</string> +// CHECK-NEXT: <key>category</key><string>Logic error</string> +// CHECK-NEXT: <key>type</key><string>Result of operation is garbage or undefined</string> +// CHECK-NEXT: <key>issue_context_kind</key><string>function</string> +// CHECK-NEXT: <key>issue_context</key><string>use</string> +// CHECK-NEXT: <key>issue_hash</key><integer>7</integer> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>25</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>5</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>10</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>39</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>39</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>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>39</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>39</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>39</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 'initArray'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Calling 'initArray'</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>29</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Entered call from 'testPassingParentRegionArray'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Entered call from 'testPassingParentRegionArray'</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>29</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>29</integer> +// CHECK-NEXT: <key>col</key><integer>4</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>30</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>30</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: </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>30</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>30</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>30</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>30</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>30</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>30</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>30</integer> +// CHECK-NEXT: <key>col</key><integer>14</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>Assuming 'x' is <= 0</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Assuming 'x' is <= 0</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>30</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>30</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>32</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>32</integer> +// CHECK-NEXT: <key>col</key><integer>14</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>39</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>39</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>39</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Returning from 'initArray'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Returning from 'initArray'</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>39</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>39</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>41</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>41</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: </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>41</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>41</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: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>41</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>12</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>12</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>16</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>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>The right operand of '*' is a garbage value</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>The right operand of '*' is a garbage value</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>description</key><string>The right operand of '*' is a garbage value</string> +// CHECK-NEXT: <key>category</key><string>Logic error</string> +// CHECK-NEXT: <key>type</key><string>Result of operation is garbage or undefined</string> +// CHECK-NEXT: <key>issue_context_kind</key><string>function</string> +// CHECK-NEXT: <key>issue_context</key><string>testPassingParentRegionArray</string> +// CHECK-NEXT: <key>issue_hash</key><integer>4</integer> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>41</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>57</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>57</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>59</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>59</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>59</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>59</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>59</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>Calling 'initStruct'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Calling 'initStruct'</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>49</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Entered call from 'testPassingParentRegionStruct'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Entered call from 'testPassingParentRegionStruct'</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>49</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>49</integer> +// CHECK-NEXT: <key>col</key><integer>4</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>50</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>50</integer> +// CHECK-NEXT: <key>col</key><integer>4</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>50</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>50</integer> +// CHECK-NEXT: <key>col</key><integer>4</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>50</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>50</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>50</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>50</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>50</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>Assuming 'x' is <= 0</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Assuming 'x' is <= 0</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>50</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>50</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>53</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>53</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: </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>59</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>59</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>59</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>Returning from 'initStruct'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Returning from 'initStruct'</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>59</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>59</integer> +// CHECK-NEXT: <key>col</key><integer>12</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>61</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>61</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: </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>61</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>61</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>61</integer> +// CHECK-NEXT: <key>col</key><integer>10</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>61</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: </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>61</integer> +// CHECK-NEXT: <key>col</key><integer>10</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>61</integer> +// CHECK-NEXT: <key>col</key><integer>15</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>61</integer> +// CHECK-NEXT: <key>col</key><integer>16</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>Dereference of null pointer (loaded from field 'f1')</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Dereference of null pointer (loaded from field 'f1')</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>description</key><string>Dereference of null pointer (loaded from field 'f1')</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>function</string> +// CHECK-NEXT: <key>issue_context</key><string>testPassingParentRegionStruct</string> +// CHECK-NEXT: <key>issue_hash</key><integer>5</integer> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>61</integer> +// CHECK-NEXT: <key>col</key><integer>10</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> diff --git a/test/Analysis/diagnostics/undef-value-param.m b/test/Analysis/diagnostics/undef-value-param.m new file mode 100644 index 0000000000000..d2a7a087b8c7d --- /dev/null +++ b/test/Analysis/diagnostics/undef-value-param.m @@ -0,0 +1,476 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx -analyzer-output=text -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx -analyzer-output=plist-multi-file %s -o - | FileCheck %s + +typedef signed char BOOL; +@protocol NSObject - (BOOL)isEqual:(id)object; @end +@interface NSObject <NSObject> {} ++(id)alloc; ++(id)new; +-(id)init; +-(id)autorelease; +-(id)copy; +- (Class)class; +-(id)retain; +@end +typedef const void * CFTypeRef; +extern void CFRelease(CFTypeRef cf); + +@interface Cell : NSObject +- (void)test; +@end + +@interface SpecialString ++ (id)alloc; +- (oneway void)release; +@end + +typedef SpecialString* SCDynamicStoreRef; +static void CreateRef(SCDynamicStoreRef *storeRef, unsigned x); +SCDynamicStoreRef anotherCreateRef(unsigned *err, unsigned x); + +@implementation Cell +- (void) test { + SCDynamicStoreRef storeRef = 0; //expected-note{{Variable 'storeRef' initialized to nil}} + CreateRef(&storeRef, 4); + //expected-note@-1{{Calling 'CreateRef'}} + //expected-note@-2{{Returning from 'CreateRef'}} + CFRelease(storeRef); //expected-warning {{Null pointer argument in call to CFRelease}} + //expected-note@-1{{Null pointer argument in call to CFRelease}} +} +@end + +static void CreateRef(SCDynamicStoreRef *storeRef, unsigned x) { + unsigned err = 0; + SCDynamicStoreRef ref = anotherCreateRef(&err, x); // why this is being inlined? + if (err) { + //expected-note@-1{{Assuming 'err' is not equal to 0}} + //expected-note@-2{{Taking true branch}} + CFRelease(ref); + ref = 0; + } + *storeRef = ref; +} + +//CHECK: <dict> +//CHECK: <key>files</key> +//CHECK: <array> +//CHECK: </array> +//CHECK: <key>diagnostics</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>path</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>33</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>33</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>33</integer> +//CHECK: <key>col</key><integer>30</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Variable 'storeRef' initialized to nil</string> +//CHECK: <key>message</key> +//CHECK: <string>Variable 'storeRef' initialized to nil</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>33</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>33</integer> +//CHECK: <key>col</key><integer>21</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>13</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>27</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Calling 'CreateRef'</string> +//CHECK: <key>message</key> +//CHECK: <string>Calling 'CreateRef'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>42</integer> +//CHECK: <key>col</key><integer>1</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Entered call from 'test'</string> +//CHECK: <key>message</key> +//CHECK: <string>Entered call from 'test'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>42</integer> +//CHECK: <key>col</key><integer>1</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>42</integer> +//CHECK: <key>col</key><integer>6</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>43</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>43</integer> +//CHECK: <key>col</key><integer>12</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>43</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>43</integer> +//CHECK: <key>col</key><integer>12</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>6</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>6</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>11</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>11</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Assuming 'err' is not equal to 0</string> +//CHECK: <key>message</key> +//CHECK: <string>Assuming 'err' is not equal to 0</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>45</integer> +//CHECK: <key>col</key><integer>11</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>48</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>48</integer> +//CHECK: <key>col</key><integer>17</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>48</integer> +//CHECK: <key>col</key><integer>9</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>48</integer> +//CHECK: <key>col</key><integer>17</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>51</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>51</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>27</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>1</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Returning from 'CreateRef'</string> +//CHECK: <key>message</key> +//CHECK: <string>Returning from 'CreateRef'</string> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>control</string> +//CHECK: <key>edges</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>start</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>34</integer> +//CHECK: <key>col</key><integer>13</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>end</key> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>13</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>kind</key><string>event</string> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <key>ranges</key> +//CHECK: <array> +//CHECK: <array> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>15</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>22</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </array> +//CHECK: <key>depth</key><integer>0</integer> +//CHECK: <key>extended_message</key> +//CHECK: <string>Null pointer argument in call to CFRelease</string> +//CHECK: <key>message</key> +//CHECK: <string>Null pointer argument in call to CFRelease</string> +//CHECK: </dict> +//CHECK: </array> +//CHECK: <key>description</key><string>Null pointer argument in call to CFRelease</string> +//CHECK: <key>category</key><string>API Misuse (Apple)</string> +//CHECK: <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string> +//CHECK: <key>issue_context_kind</key><string>Objective-C method</string> +//CHECK: <key>issue_context</key><string>test</string> +//CHECK: <key>issue_hash</key><integer>5</integer> +//CHECK: <key>location</key> +//CHECK: <dict> +//CHECK: <key>line</key><integer>37</integer> +//CHECK: <key>col</key><integer>5</integer> +//CHECK: <key>file</key><integer>0</integer> +//CHECK: </dict> +//CHECK: </dict> +//CHECK: </array> +//CHECK: </dict> +//CHECK: </plist> |
