analyzer: add regression test for leak false positive
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 14 Sep 2020 13:05:50 +0000 (09:05 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Mon, 14 Sep 2020 16:27:28 +0000 (12:27 -0400)
Downstream bug report:
  https://bugzilla.redhat.com/show_bug.cgi?id=1878600
describes a false positive from -Wanalyzer-file-leak seen with
gcc 10.2, but which has been fixed in gcc 11.

This patch adds the reproducer as a regression test.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/rhbz1878600.c: New test.

gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c b/gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c
new file mode 100644 (file)
index 0000000..9f6ccb6
--- /dev/null
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+#define INI_MAX_LINE 200
+
+typedef char* (*ini_reader)(char* str, int num, void* stream);
+
+int ini_parse(const char* filename);
+
+static int ini_parse_stream(ini_reader reader, void* stream)
+{
+    char line[INI_MAX_LINE];
+    int max_line = INI_MAX_LINE;
+    while (reader(line, max_line, stream) != NULL)
+           ;
+    return 0;
+}
+
+static int ini_parse_file(FILE* file)
+{
+    return ini_parse_stream((ini_reader)fgets, file);
+}
+
+int ini_parse(const char* filename)
+{
+    FILE* file;
+    int error;
+
+    file = fopen(filename, "r");
+    if (!file)
+        return -1;
+    error = ini_parse_file(file);
+    fclose(file);
+    return error;
+}