xref: /llvm-project/clang/test/Analysis/uninit-structured-binding-array.cpp (revision 8a13326d184c2829a51d7c00f467ded06412f858)
18ef62808Sisuckatcs // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c++17 -verify %s
28ef62808Sisuckatcs 
38ef62808Sisuckatcs void clang_analyzer_eval(bool);
48ef62808Sisuckatcs 
array_value_a(void)58ef62808Sisuckatcs void array_value_a(void) {
68ef62808Sisuckatcs   int arr[2];
78ef62808Sisuckatcs   auto [a, b] = arr;
88ef62808Sisuckatcs   arr[0] = 0;
98ef62808Sisuckatcs 
108ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
118ef62808Sisuckatcs }
128ef62808Sisuckatcs 
array_value_b(void)138ef62808Sisuckatcs void array_value_b(void) {
148ef62808Sisuckatcs   int arr[] = {1, 2};
158ef62808Sisuckatcs   auto [a, b] = arr;
168ef62808Sisuckatcs 
178ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
188ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{TRUE}}
198ef62808Sisuckatcs 
208ef62808Sisuckatcs   int x = a; // no-warning
218ef62808Sisuckatcs }
228ef62808Sisuckatcs 
array_value_c(void)238ef62808Sisuckatcs void array_value_c(void) {
248ef62808Sisuckatcs   int arr[3];
258ef62808Sisuckatcs 
268ef62808Sisuckatcs   arr[1] = 1;
278ef62808Sisuckatcs 
288ef62808Sisuckatcs   auto [a, b, c] = arr;
298ef62808Sisuckatcs 
308ef62808Sisuckatcs   clang_analyzer_eval(b == arr[1]); // expected-warning{{TRUE}}
318ef62808Sisuckatcs 
328ef62808Sisuckatcs   int y = b; // no-warning
338ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
348ef62808Sisuckatcs }
358ef62808Sisuckatcs 
array_value_d(void)368ef62808Sisuckatcs void array_value_d(void) {
378ef62808Sisuckatcs   int arr[3];
388ef62808Sisuckatcs 
398ef62808Sisuckatcs   arr[1] = 1;
408ef62808Sisuckatcs 
418ef62808Sisuckatcs   auto [a, b, c] = arr;
428ef62808Sisuckatcs 
438ef62808Sisuckatcs   clang_analyzer_eval(b == arr[1]); // expected-warning{{TRUE}}
448ef62808Sisuckatcs 
458ef62808Sisuckatcs   int y = b; // no-warning
468ef62808Sisuckatcs   int x = c; // expected-warning{{Assigned value is garbage or undefined}}
478ef62808Sisuckatcs }
488ef62808Sisuckatcs 
array_value_e(void)498ef62808Sisuckatcs void array_value_e(void) {
508ef62808Sisuckatcs   int uninit[2];
518ef62808Sisuckatcs   int init[2] = {0};
528ef62808Sisuckatcs 
538ef62808Sisuckatcs   uninit[0] = init[0];
548ef62808Sisuckatcs 
558ef62808Sisuckatcs   auto [i, j] = init;
568ef62808Sisuckatcs 
578ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
588ef62808Sisuckatcs   clang_analyzer_eval(j == 0); // expected-warning{{TRUE}}
598ef62808Sisuckatcs 
608ef62808Sisuckatcs   int a = i; // no-warning
618ef62808Sisuckatcs   int b = j; // no-warning
628ef62808Sisuckatcs }
638ef62808Sisuckatcs 
array_value_f(void)648ef62808Sisuckatcs void array_value_f(void) {
658ef62808Sisuckatcs   int uninit[2];
668ef62808Sisuckatcs   int init[2] = {0};
678ef62808Sisuckatcs 
688ef62808Sisuckatcs   uninit[0] = init[0];
698ef62808Sisuckatcs 
708ef62808Sisuckatcs   auto [i, j] = uninit;
718ef62808Sisuckatcs 
728ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
738ef62808Sisuckatcs 
748ef62808Sisuckatcs   int a = i; // no-warning
758ef62808Sisuckatcs   int b = j; // expected-warning{{Assigned value is garbage or undefined}}
768ef62808Sisuckatcs }
778ef62808Sisuckatcs 
array_lref_a(void)788ef62808Sisuckatcs void array_lref_a(void) {
798ef62808Sisuckatcs   int arr[2];
808ef62808Sisuckatcs   auto &[a, b] = arr;
818ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
828ef62808Sisuckatcs }
838ef62808Sisuckatcs 
array_lref_b(void)848ef62808Sisuckatcs void array_lref_b(void) {
858ef62808Sisuckatcs   int arr[] = {1, 2};
868ef62808Sisuckatcs   auto &[a, b] = arr;
878ef62808Sisuckatcs 
888ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
898ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{TRUE}}
908ef62808Sisuckatcs 
918ef62808Sisuckatcs   int x = a; // no-warning
928ef62808Sisuckatcs }
938ef62808Sisuckatcs 
array_lref_c(void)948ef62808Sisuckatcs void array_lref_c(void) {
958ef62808Sisuckatcs   int arr[2];
968ef62808Sisuckatcs   auto &[a, b] = arr;
978ef62808Sisuckatcs 
988ef62808Sisuckatcs   arr[0] = 1;
998ef62808Sisuckatcs 
1008ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
1018ef62808Sisuckatcs 
1028ef62808Sisuckatcs   int x = a; // no-warning
1038ef62808Sisuckatcs   int y = b; // expected-warning{{Assigned value is garbage or undefined}}
1048ef62808Sisuckatcs }
1058ef62808Sisuckatcs 
array_lref_d(void)1068ef62808Sisuckatcs void array_lref_d(void) {
1078ef62808Sisuckatcs   int arr[3];
1088ef62808Sisuckatcs 
1098ef62808Sisuckatcs   arr[1] = 1;
1108ef62808Sisuckatcs 
1118ef62808Sisuckatcs   auto &[a, b, c] = arr;
1128ef62808Sisuckatcs 
1138ef62808Sisuckatcs   clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
1148ef62808Sisuckatcs 
1158ef62808Sisuckatcs   int y = b; // no-warning
1168ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
1178ef62808Sisuckatcs }
1188ef62808Sisuckatcs 
array_lref_e(void)1198ef62808Sisuckatcs void array_lref_e(void) {
1208ef62808Sisuckatcs   int arr[3];
1218ef62808Sisuckatcs 
1228ef62808Sisuckatcs   arr[1] = 1;
1238ef62808Sisuckatcs 
1248ef62808Sisuckatcs   auto &[a, b, c] = arr;
1258ef62808Sisuckatcs 
1268ef62808Sisuckatcs   clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
1278ef62808Sisuckatcs 
1288ef62808Sisuckatcs   int y = b; // no-warning
1298ef62808Sisuckatcs   int x = c; // expected-warning{{Assigned value is garbage or undefined}}
1308ef62808Sisuckatcs }
1318ef62808Sisuckatcs 
array_lref_f(void)1328ef62808Sisuckatcs void array_lref_f(void) {
1338ef62808Sisuckatcs   int uninit[2];
1348ef62808Sisuckatcs   int init[2] = {0};
1358ef62808Sisuckatcs 
1368ef62808Sisuckatcs   uninit[0] = init[0];
1378ef62808Sisuckatcs 
1388ef62808Sisuckatcs   auto &[i, j] = init;
1398ef62808Sisuckatcs 
1408ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
1418ef62808Sisuckatcs   clang_analyzer_eval(j == 0); // expected-warning{{TRUE}}
1428ef62808Sisuckatcs 
1438ef62808Sisuckatcs   int a = i; // no-warning
1448ef62808Sisuckatcs   int b = j; // no-warning
1458ef62808Sisuckatcs }
1468ef62808Sisuckatcs 
array_lref_g(void)1478ef62808Sisuckatcs void array_lref_g(void) {
1488ef62808Sisuckatcs   int uninit[2];
1498ef62808Sisuckatcs   int init[2] = {0};
1508ef62808Sisuckatcs 
1518ef62808Sisuckatcs   uninit[0] = init[0];
1528ef62808Sisuckatcs 
1538ef62808Sisuckatcs   auto &[i, j] = uninit;
1548ef62808Sisuckatcs 
1558ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
1568ef62808Sisuckatcs 
1578ef62808Sisuckatcs   int a = i; // no-warning
1588ef62808Sisuckatcs   int b = j; // expected-warning{{Assigned value is garbage or undefined}}
1598ef62808Sisuckatcs }
1608ef62808Sisuckatcs 
array_rref_a(void)1618ef62808Sisuckatcs void array_rref_a(void) {
1628ef62808Sisuckatcs   int arr[2];
1638ef62808Sisuckatcs   auto &&[a, b] = arr;
1648ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
1658ef62808Sisuckatcs }
1668ef62808Sisuckatcs 
array_rref_b(void)1678ef62808Sisuckatcs void array_rref_b(void) {
1688ef62808Sisuckatcs   int arr[] = {1, 2};
1698ef62808Sisuckatcs   auto &&[a, b] = arr;
1708ef62808Sisuckatcs 
1718ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
1728ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{TRUE}}
1738ef62808Sisuckatcs 
1748ef62808Sisuckatcs   int x = a; // no-warning
1758ef62808Sisuckatcs }
1768ef62808Sisuckatcs 
array_rref_c(void)1778ef62808Sisuckatcs void array_rref_c(void) {
1788ef62808Sisuckatcs   int arr[2];
1798ef62808Sisuckatcs   auto &&[a, b] = arr;
1808ef62808Sisuckatcs 
1818ef62808Sisuckatcs   arr[0] = 1;
1828ef62808Sisuckatcs 
1838ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
1848ef62808Sisuckatcs 
1858ef62808Sisuckatcs   int x = a; // no-warning
1868ef62808Sisuckatcs   int y = b; // expected-warning{{Assigned value is garbage or undefined}}
1878ef62808Sisuckatcs }
1888ef62808Sisuckatcs 
array_rref_d(void)1898ef62808Sisuckatcs void array_rref_d(void) {
1908ef62808Sisuckatcs   int arr[3];
1918ef62808Sisuckatcs 
1928ef62808Sisuckatcs   arr[1] = 1;
1938ef62808Sisuckatcs 
1948ef62808Sisuckatcs   auto &&[a, b, c] = arr;
1958ef62808Sisuckatcs 
1968ef62808Sisuckatcs   clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
1978ef62808Sisuckatcs 
1988ef62808Sisuckatcs   int y = b; // no-warning
1998ef62808Sisuckatcs   int x = a; // expected-warning{{Assigned value is garbage or undefined}}
2008ef62808Sisuckatcs }
2018ef62808Sisuckatcs 
array_rref_e(void)2028ef62808Sisuckatcs void array_rref_e(void) {
2038ef62808Sisuckatcs   int arr[3];
2048ef62808Sisuckatcs 
2058ef62808Sisuckatcs   arr[1] = 1;
2068ef62808Sisuckatcs 
2078ef62808Sisuckatcs   auto &&[a, b, c] = arr;
2088ef62808Sisuckatcs 
2098ef62808Sisuckatcs   clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
2108ef62808Sisuckatcs 
2118ef62808Sisuckatcs   int y = b; // no-warning
2128ef62808Sisuckatcs   int x = c; // expected-warning{{Assigned value is garbage or undefined}}
2138ef62808Sisuckatcs }
2148ef62808Sisuckatcs 
array_rref_f(void)2158ef62808Sisuckatcs void array_rref_f(void) {
2168ef62808Sisuckatcs   int uninit[2];
2178ef62808Sisuckatcs   int init[2] = {0};
2188ef62808Sisuckatcs 
2198ef62808Sisuckatcs   uninit[0] = init[0];
2208ef62808Sisuckatcs 
2218ef62808Sisuckatcs   auto &&[i, j] = init;
2228ef62808Sisuckatcs 
2238ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
2248ef62808Sisuckatcs   clang_analyzer_eval(j == 0); // expected-warning{{TRUE}}
2258ef62808Sisuckatcs 
2268ef62808Sisuckatcs   int a = i; // no-warning
2278ef62808Sisuckatcs   int b = j; // no-warning
2288ef62808Sisuckatcs }
2298ef62808Sisuckatcs 
array_rref_g(void)2308ef62808Sisuckatcs void array_rref_g(void) {
2318ef62808Sisuckatcs   int uninit[2];
2328ef62808Sisuckatcs   int init[2] = {0};
2338ef62808Sisuckatcs 
2348ef62808Sisuckatcs   uninit[0] = init[0];
2358ef62808Sisuckatcs 
2368ef62808Sisuckatcs   auto &&[i, j] = uninit;
2378ef62808Sisuckatcs 
2388ef62808Sisuckatcs   clang_analyzer_eval(i == 0); // expected-warning{{TRUE}}
2398ef62808Sisuckatcs 
2408ef62808Sisuckatcs   int a = i; // no-warning
2418ef62808Sisuckatcs   int b = j; // expected-warning{{Assigned value is garbage or undefined}}
2428ef62808Sisuckatcs }
2438ef62808Sisuckatcs 
array_change_a(void)2448ef62808Sisuckatcs void array_change_a(void) {
2458ef62808Sisuckatcs   int arr[] = {1, 2};
2468ef62808Sisuckatcs 
2478ef62808Sisuckatcs   auto [a, b] = arr;
2488ef62808Sisuckatcs 
2498ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
2508ef62808Sisuckatcs   a = 3;
2518ef62808Sisuckatcs   clang_analyzer_eval(a == 3); // expected-warning{{TRUE}}
2528ef62808Sisuckatcs 
2538ef62808Sisuckatcs   clang_analyzer_eval(arr[0] == 1); // expected-warning{{TRUE}}
2548ef62808Sisuckatcs   clang_analyzer_eval(arr[1] == 2); // expected-warning{{TRUE}}
2558ef62808Sisuckatcs 
2568ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{TRUE}}
2578ef62808Sisuckatcs }
2588ef62808Sisuckatcs 
array_change_b(void)2598ef62808Sisuckatcs void array_change_b(void) {
2608ef62808Sisuckatcs   int arr[] = {1, 2};
2618ef62808Sisuckatcs 
2628ef62808Sisuckatcs   auto &[a, b] = arr;
2638ef62808Sisuckatcs 
2648ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{TRUE}}
2658ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{TRUE}}
2668ef62808Sisuckatcs 
2678ef62808Sisuckatcs   a = 3;
2688ef62808Sisuckatcs   clang_analyzer_eval(a == 3); // expected-warning{{TRUE}}
2698ef62808Sisuckatcs 
2708ef62808Sisuckatcs   clang_analyzer_eval(arr[0] == 3); // expected-warning{{TRUE}}
2718ef62808Sisuckatcs   clang_analyzer_eval(arr[1] == 2); // expected-warning{{TRUE}}
2728ef62808Sisuckatcs }
2738ef62808Sisuckatcs 
array_small_a(void)2748ef62808Sisuckatcs void array_small_a(void) {
2758ef62808Sisuckatcs   int arr[5];
2768ef62808Sisuckatcs 
2778ef62808Sisuckatcs   auto [a, b, c, d, e] = arr;
2788ef62808Sisuckatcs 
2798ef62808Sisuckatcs   int x = e; // expected-warning{{Assigned value is garbage or undefined}}
2808ef62808Sisuckatcs }
2818ef62808Sisuckatcs 
array_big_a(void)2828ef62808Sisuckatcs void array_big_a(void) {
2838ef62808Sisuckatcs   int arr[6];
2848ef62808Sisuckatcs 
2858ef62808Sisuckatcs   auto [a, b, c, d, e, f] = arr;
2868ef62808Sisuckatcs 
2878ef62808Sisuckatcs   // FIXME: These will be Undefined when we handle reading Undefined values from lazyCompoundVal.
2888ef62808Sisuckatcs   clang_analyzer_eval(a == 1); // expected-warning{{UNKNOWN}}
2898ef62808Sisuckatcs   clang_analyzer_eval(b == 2); // expected-warning{{UNKNOWN}}
2908ef62808Sisuckatcs   clang_analyzer_eval(c == 3); // expected-warning{{UNKNOWN}}
2918ef62808Sisuckatcs   clang_analyzer_eval(d == 4); // expected-warning{{UNKNOWN}}
2928ef62808Sisuckatcs   clang_analyzer_eval(e == 5); // expected-warning{{UNKNOWN}}
2938ef62808Sisuckatcs   clang_analyzer_eval(f == 6); // expected-warning{{UNKNOWN}}
2948ef62808Sisuckatcs }
295*8a13326dSisuckatcs 
296*8a13326dSisuckatcs struct S {
297*8a13326dSisuckatcs   int a = 1;
298*8a13326dSisuckatcs   int b = 2;
299*8a13326dSisuckatcs };
300*8a13326dSisuckatcs 
non_pod_val(void)301*8a13326dSisuckatcs void non_pod_val(void) {
302*8a13326dSisuckatcs   S arr[2];
303*8a13326dSisuckatcs 
304*8a13326dSisuckatcs   auto [x, y] = arr;
305*8a13326dSisuckatcs 
306*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 1); // expected-warning{{TRUE}}
307*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 2); // expected-warning{{TRUE}}
308*8a13326dSisuckatcs 
309*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 1); // expected-warning{{TRUE}}
310*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 2); // expected-warning{{TRUE}}
311*8a13326dSisuckatcs }
312*8a13326dSisuckatcs 
non_pod_val_syntax_2(void)313*8a13326dSisuckatcs void non_pod_val_syntax_2(void) {
314*8a13326dSisuckatcs   S arr[2];
315*8a13326dSisuckatcs 
316*8a13326dSisuckatcs   auto [x, y](arr);
317*8a13326dSisuckatcs 
318*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 1); // expected-warning{{TRUE}}
319*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 2); // expected-warning{{TRUE}}
320*8a13326dSisuckatcs 
321*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 1); // expected-warning{{TRUE}}
322*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 2); // expected-warning{{TRUE}}
323*8a13326dSisuckatcs }
324*8a13326dSisuckatcs 
non_pod_lref(void)325*8a13326dSisuckatcs void non_pod_lref(void) {
326*8a13326dSisuckatcs   S arr[2];
327*8a13326dSisuckatcs 
328*8a13326dSisuckatcs   auto &[x, y] = arr;
329*8a13326dSisuckatcs 
330*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 1); // expected-warning{{TRUE}}
331*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 2); // expected-warning{{TRUE}}
332*8a13326dSisuckatcs 
333*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 1); // expected-warning{{TRUE}}
334*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 2); // expected-warning{{TRUE}}
335*8a13326dSisuckatcs }
336*8a13326dSisuckatcs 
non_pod_rref(void)337*8a13326dSisuckatcs void non_pod_rref(void) {
338*8a13326dSisuckatcs   S arr[2];
339*8a13326dSisuckatcs 
340*8a13326dSisuckatcs   auto &&[x, y] = arr;
341*8a13326dSisuckatcs 
342*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 1); // expected-warning{{TRUE}}
343*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 2); // expected-warning{{TRUE}}
344*8a13326dSisuckatcs 
345*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 1); // expected-warning{{TRUE}}
346*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 2); // expected-warning{{TRUE}}
347*8a13326dSisuckatcs }
348*8a13326dSisuckatcs 
349*8a13326dSisuckatcs struct SUD {
350*8a13326dSisuckatcs   inline static int c = 0;
351*8a13326dSisuckatcs 
352*8a13326dSisuckatcs   int a = 1;
353*8a13326dSisuckatcs   int b = 2;
354*8a13326dSisuckatcs 
SUDSUD355*8a13326dSisuckatcs   SUD() { ++c; };
356*8a13326dSisuckatcs 
SUDSUD357*8a13326dSisuckatcs   SUD(const SUD &copy) {
358*8a13326dSisuckatcs     a = copy.a + 1;
359*8a13326dSisuckatcs     b = copy.b + 1;
360*8a13326dSisuckatcs   }
361*8a13326dSisuckatcs };
362*8a13326dSisuckatcs 
non_pod_user_defined_val(void)363*8a13326dSisuckatcs void non_pod_user_defined_val(void) {
364*8a13326dSisuckatcs   SUD arr[2];
365*8a13326dSisuckatcs 
366*8a13326dSisuckatcs   auto [x, y] = arr;
367*8a13326dSisuckatcs 
368*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 2); // expected-warning{{TRUE}}
369*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 3); // expected-warning{{TRUE}}
370*8a13326dSisuckatcs 
371*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 2); // expected-warning{{TRUE}}
372*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 3); // expected-warning{{TRUE}}
373*8a13326dSisuckatcs }
374*8a13326dSisuckatcs 
non_pod_user_defined_val_syntax_2(void)375*8a13326dSisuckatcs void non_pod_user_defined_val_syntax_2(void) {
376*8a13326dSisuckatcs   SUD::c = 0;
377*8a13326dSisuckatcs   SUD arr[2];
378*8a13326dSisuckatcs 
379*8a13326dSisuckatcs   auto [x, y](arr);
380*8a13326dSisuckatcs 
381*8a13326dSisuckatcs   clang_analyzer_eval(SUD::c == 2); // expected-warning{{TRUE}}
382*8a13326dSisuckatcs 
383*8a13326dSisuckatcs   clang_analyzer_eval(x.a == 2); // expected-warning{{TRUE}}
384*8a13326dSisuckatcs   clang_analyzer_eval(x.b == 3); // expected-warning{{TRUE}}
385*8a13326dSisuckatcs 
386*8a13326dSisuckatcs   clang_analyzer_eval(y.a == 2); // expected-warning{{TRUE}}
387*8a13326dSisuckatcs   clang_analyzer_eval(y.b == 3); // expected-warning{{TRUE}}
388*8a13326dSisuckatcs }
389