1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s 2>&1 | FileCheck %s
// expected-no-diagnostics
void clang_analyzer_printState();
struct Member {
int large[10];
};
Member getMember();
struct Class {
Member m;
int first;
int second;
int third;
};
void test_output(int n) {
Class objsecond;
objsecond.m.large[n] = 20;
Class objfirst;
objfirst.m = getMember();
objfirst.second = 2;
objfirst.third = 3;
objfirst.first = 1;
clang_analyzer_printState();
// Default binding is before any direct bindings.
// Direct bindings are increasing by offset.
// Global memory space clusters come before any other clusters.
// Otherwise, Clusters are in alphabetical order.
// CHECK: "store": { "pointer": "0x{{[0-9a-f]+}}", "items": [
// CHECK-NEXT: { "cluster": "GlobalInternalSpaceRegion", "pointer": "0x{{[0-9a-f]+}}", "items": [
// CHECK-NEXT: { "kind": "Default", "offset": 0, "value": "conj_$
// CHECK-NEXT: ]},
// CHECK-NEXT: { "cluster": "GlobalSystemSpaceRegion", "pointer": "0x{{[0-9a-f]+}}", "items": [
// CHECK-NEXT: { "kind": "Default", "offset": 0, "value": "conj_$
// CHECK-NEXT: ]},
// CHECK-NEXT: { "cluster": "objfirst", "pointer": "0x{{[0-9a-f]+}}", "items": [
// CHECK-NEXT: { "kind": "Default", "offset": 0, "value": "conj_$
// CHECK-NEXT: { "kind": "Direct", "offset": 320, "value": "1 S32b" },
// CHECK-NEXT: { "kind": "Direct", "offset": 352, "value": "2 S32b" },
// CHECK-NEXT: { "kind": "Direct", "offset": 384, "value": "3 S32b" }
// CHECK-NEXT: ]},
// CHECK-NEXT: { "cluster": "objsecond", "pointer": "0x{{[0-9a-f]+}}", "items": [
// CHECK-NEXT: { "kind": "Default", "offset": 0, "value": "Unknown" },
// CHECK-NEXT: { "kind": "Direct", "offset": null, "value": "20 S32b" }
// CHECK-NEXT: ]}
// CHECK-NEXT: ]},
(void)objfirst;
(void)objsecond;
}
|