aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-03-10 18:50:03 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2020-03-18 09:59:17 -0400
commitf665beeba625490bd96a593d23e00726d969cf98 (patch)
treebf629692dbd6ac5a9feb81faf5bfbb8b9cee4689 /gcc
parent7d9c107ab1eab331e7011513b11e26b78850d614 (diff)
downloadgcc-f665beeba625490bd96a593d23e00726d969cf98.zip
gcc-f665beeba625490bd96a593d23e00726d969cf98.tar.gz
gcc-f665beeba625490bd96a593d23e00726d969cf98.tar.bz2
analyzer: add test coverage for fixed ICE [PR94047]
PR analyzer/94047 reports an ICE, which turned out to be caused by the erroneous use of TREE_TYPE on the view region's type in region_model::get_representative_path_var that I introduced in r10-7024-ge516294a1acb28aaaad44cfd583cc6a80354044e and fixed in g:787477a226033e36be3f6d16b71be13dd917e982. This patch adds a regression test for the ICE. gcc/testsuite/ChangeLog: PR analyzer/94047 * gcc.dg/analyzer/pr94047.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/pr94047.c23
2 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4aa798f..a91d737 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-03-18 David Malcolm <dmalcolm@redhat.com>
+
+ PR analyzer/94047
+ * gcc.dg/analyzer/pr94047.c: New test.
+
2020-03-18 Richard Biener <rguenther@suse.de>
PR middle-end/94206
diff --git a/gcc/testsuite/gcc.dg/analyzer/pr94047.c b/gcc/testsuite/gcc.dg/analyzer/pr94047.c
new file mode 100644
index 0000000..d989a25
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/pr94047.c
@@ -0,0 +1,23 @@
+/* { dg-additional-options "-Wno-analyzer-too-complex" } */
+/* TODO: the above ought not to be necessary, but currently is due to a
+ state explosion within the for loop. */
+
+typedef struct list
+{
+ struct list *next;
+} tlist;
+
+void
+bar (struct list *l)
+{
+ l->next = l->next->next;
+}
+
+void
+foo (void)
+{
+ struct list l;
+ tlist t = l;
+ for (;;)
+ bar (&t);
+}