From 441cbb00ed735c59a8ad073147df326f7bd321f5 Mon Sep 17 00:00:00 2001
From: David Malcolm <dmalcolm@redhat.com>
Date: Sat, 9 May 2020 07:48:31 -0400
Subject: [PATCH 111/251] FIXME: non-working test cases for brace-enclosed
 initializers

---
 gcc/testsuite/gcc.dg/analyzer/init.c | 145 +++++++++++++++++++++++++++
 1 file changed, 145 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/analyzer/init.c

diff --git a/gcc/testsuite/gcc.dg/analyzer/init.c b/gcc/testsuite/gcc.dg/analyzer/init.c
new file mode 100644
index 00000000000..cb72c13fe0e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/init.c
@@ -0,0 +1,145 @@
+/* Tests of brace-enclosed initializers
+   Some of these use the CONSTRUCTOR tree code, but it appears
+   only for a full zero-init; it appears that by the time the analyzer
+   runs that this initialization has been converted into field-wise
+   gimple assign stmts, with just "zero-init everything" CONSTRUCTORs
+   and "clobber" CONSTRUCTORs.  */
+
+#include "analyzer-decls.h"
+
+struct coord
+{
+  int x;
+  int y;
+};
+
+struct tri
+{
+  struct coord v[3];
+};
+
+union iap
+{
+  int i;
+  void *p;
+};
+
+void test_1 (void)
+{
+  struct coord c = {3, 4};
+  __analyzer_eval (c.x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c.y == 4); /* { dg-warning "TRUE" } */  
+}
+
+void test_2 (void)
+{
+  struct coord c = {3};
+  __analyzer_eval (c.x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c.y == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_3 (void)
+{
+  struct coord c = {};
+  __analyzer_eval (c.x == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c.y == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_4 (void)
+{
+  int c[2] = {3, 4};
+  __analyzer_eval (c[0] == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1] == 4); /* { dg-warning "TRUE" } */  
+}
+
+void test_5 (void)
+{
+  int c[2] = {3};
+  __analyzer_eval (c[0] == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1] == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_6 (void)
+{
+  int c[2] = {};
+  __analyzer_eval (c[0] == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1] == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_7 (void)
+{
+  struct coord c[2] = {{3, 4}, {5, 6}};
+  __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */  
+  __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */  
+}
+
+void test_8 (void)
+{
+  struct coord c[2] = {{3}, {5}};
+  __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[0].y == 0); /* { dg-warning "TRUE" } */  
+  __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1].y == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_9 (void)
+{
+  struct coord c[2] = {{}, {}};
+  __analyzer_eval (c[0].x == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[0].y == 0); /* { dg-warning "TRUE" } */  
+  __analyzer_eval (c[1].x == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1].y == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_10 (void)
+{
+  struct coord c[2] = {{.y = 4, .x = 3}, {5, 6}};
+  __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */  
+  __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */  
+}
+
+void test_11 (void)
+{
+  struct coord c[2] = {{.y = 4}, {5, 6}};
+  __analyzer_eval (c[0].x == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */  
+  __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */
+  __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */  
+}
+
+void test_12 (void)
+{
+  struct tri t = {};
+  __analyzer_eval (t.v[0].x == 0); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[2].y == 0); /* { dg-warning "TRUE" } */  
+}
+
+void test_13 (void)
+{
+  struct tri t = {3, 4, 5, 6, 7, 8};
+  __analyzer_eval (t.v[0].x == 3); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[0].y == 4); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[1].x == 5); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[1].y == 6); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[2].x == 7); /* { dg-warning "TRUE" } */
+  __analyzer_eval (t.v[2].y == 8); /* { dg-warning "TRUE" } */
+}
+
+void test_14 (void)
+{
+  union iap u = {};
+  __analyzer_eval (u.i == 0); /* { dg-warning "TRUE" } */
+}
+
+
+/* TODO:   
+   For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE:
+   The field INDEX of each constructor_elt is a FIELD_DECL.
+
+   For ARRAY_TYPE:
+
+   CONSTRUCTOR_NO_CLEARING flag.  */
-- 
2.26.2

