diff options
author | Ted Kremenek <kremenek@apple.com> | 2013-02-24 07:21:01 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2013-02-24 07:21:01 +0000 |
commit | 43b82b823a6113fdbee54243b280db9c55ef72cb (patch) | |
tree | 7fffa0612f4d6204f3554521ca6a77bd2f0ba87f /test/Analysis | |
parent | 0dd15d78fb0c99faa5df724139ba4c16a9a345c6 (diff) |
[analyzer] tracking stores/constraints now works for ObjC ivars or struct fields.
This required more changes than I originally expected:
- ObjCIvarRegion implements "canPrintPretty" et al
- DereferenceChecker indicates the null pointer source is an ivar
- bugreporter::trackNullOrUndefValue() uses an alternate algorithm
to compute the location region to track by scouring the ExplodedGraph.
This allows us to get the actual MemRegion for variables, ivars,
fields, etc. We only hand construct a VarRegion for C++ references.
- ExplodedGraph no longer drops nodes for expressions that are marked
'lvalue'. This is to facilitate the logic in the previous bullet.
This may lead to a slight increase in size in the ExplodedGraph,
which I have not measured, but it is likely not to be a big deal.
I have validated each of the changed plist output.
Fixes <rdar://problem/12114812>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175988 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r-- | test/Analysis/diagnostics/deref-track-symbolic-region.c | 714 | ||||
-rw-r--r-- | test/Analysis/diagnostics/undef-value-param.c | 302 | ||||
-rw-r--r-- | test/Analysis/plist-output-alternate.m | 63 | ||||
-rw-r--r-- | test/Analysis/plist-output.m | 182 |
4 files changed, 814 insertions, 447 deletions
diff --git a/test/Analysis/diagnostics/deref-track-symbolic-region.c b/test/Analysis/diagnostics/deref-track-symbolic-region.c index 2e624dfa89..e2ec8fc5f3 100644 --- a/test/Analysis/diagnostics/deref-track-symbolic-region.c +++ b/test/Analysis/diagnostics/deref-track-symbolic-region.c @@ -1,5 +1,6 @@ // 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 +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: FileCheck --input-file=%t.plist %s struct S { int *x; @@ -18,7 +19,7 @@ void inlined(struct S *s, int m) { } void test(struct S syz, int *pp) { int m = 0; - syz.x = foo(); + syz.x = foo(); // expected-note{{Value assigned to 'syz.x'}} inlined(&syz, m); // expected-note@-1{{Calling 'inlined'}} // expected-note@-2{{Returning from 'inlined'}} @@ -26,329 +27,386 @@ void test(struct S syz, int *pp) { // 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><string>6</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: </dict> -//CHECK: </array> -//CHECK: </dict> -//CHECK: </plist> +// 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>21</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>21</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>22</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>22</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>22</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>22</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>22</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>Value assigned to 'syz.x'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Value assigned to 'syz.x'</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>22</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>22</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>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>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>23</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>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>18</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 'inlined'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Calling 'inlined'</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>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 '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>12</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>12</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>13</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>13</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>13</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>13</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>13</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>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>event</string> +// CHECK-NEXT: <key>location</key> +// 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: <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>7</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>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Assuming pointer value is null</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Assuming pointer value is null</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>ranges</key> +// CHECK-NEXT: <array> +// 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>18</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 'inlined'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Returning from 'inlined'</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>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>26</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>26</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: </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>26</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>26</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>26</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>26</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>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>26</integer> +// CHECK-NEXT: <key>col</key><integer>8</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>26</integer> +// CHECK-NEXT: <key>col</key><integer>13</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>26</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>Dereference of null pointer (loaded from field 'x')</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Dereference of null pointer (loaded from field 'x')</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>description</key><string>Dereference of null pointer (loaded from field 'x')</string> |