analyzer: convert tests with dos2unix
authorMartin Liska <mliska@suse.cz>
Mon, 25 Jul 2022 06:38:37 +0000 (08:38 +0200)
committerMartin Liska <mliska@suse.cz>
Mon, 25 Jul 2022 17:33:16 +0000 (19:33 +0200)
gcc/testsuite/ChangeLog:

* gcc.dg/analyzer/fd-2.c: Convert Windows endlines to Unix
style.
* gcc.dg/analyzer/fd-3.c: Likewise.
* gcc.dg/analyzer/fd-4.c: Likewise.
* gcc.dg/analyzer/fd-5.c: Likewise.
* c-c++-common/attr-fd.c: Likewise.

gcc/testsuite/c-c++-common/attr-fd.c
gcc/testsuite/gcc.dg/analyzer/fd-2.c
gcc/testsuite/gcc.dg/analyzer/fd-3.c
gcc/testsuite/gcc.dg/analyzer/fd-4.c
gcc/testsuite/gcc.dg/analyzer/fd-5.c

index e4bb4ed..9f12093 100644 (file)
@@ -1,18 +1,18 @@
-\r
-int not_a_fn __attribute__ ((fd_arg(1))); /* { dg-warning "'fd_arg' attribute only applies to function types" } */\r
-\r
-void f (char *p) __attribute__ ((fd_arg(1))); /* { dg-warning "'fd_arg' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */\r
-\r
-\r
-int not_a_fn_b __attribute__ ((fd_arg_read(1))); /* { dg-warning "'fd_arg_read' attribute only applies to function types" } */\r
-\r
-void g (char *p) __attribute__ ((fd_arg_read(1))); /* { dg-warning "'fd_arg_read' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */\r
-\r
-\r
-int not_a_fn_c __attribute__ ((fd_arg_write(1))); /* { dg-warning "'fd_arg_write' attribute only applies to function types" } */\r
-\r
-void f (char *p) __attribute__ ((fd_arg_write(1))); /* { dg-warning "'fd_arg_write' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */\r
-\r
-\r
-void fn_a (int fd) __attribute__ ((fd_arg(0))); /* { dg-warning "'fd_arg' attribute argument value '0' does not refer to a function parameter" } */\r
-void fd_a_1 (int fd) __attribute__ ((fd_arg("notint"))); /* { dg-warning "'fd_arg' attribute argument has type ('char\\\[7\\\]'|'const char\\\*')" } */\r
+
+int not_a_fn __attribute__ ((fd_arg(1))); /* { dg-warning "'fd_arg' attribute only applies to function types" } */
+
+void f (char *p) __attribute__ ((fd_arg(1))); /* { dg-warning "'fd_arg' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */
+
+
+int not_a_fn_b __attribute__ ((fd_arg_read(1))); /* { dg-warning "'fd_arg_read' attribute only applies to function types" } */
+
+void g (char *p) __attribute__ ((fd_arg_read(1))); /* { dg-warning "'fd_arg_read' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */
+
+
+int not_a_fn_c __attribute__ ((fd_arg_write(1))); /* { dg-warning "'fd_arg_write' attribute only applies to function types" } */
+
+void f (char *p) __attribute__ ((fd_arg_write(1))); /* { dg-warning "'fd_arg_write' attribute argument value '1' refers to parameter type 'char ?\\\*'" } */
+
+
+void fn_a (int fd) __attribute__ ((fd_arg(0))); /* { dg-warning "'fd_arg' attribute argument value '0' does not refer to a function parameter" } */
+void fd_a_1 (int fd) __attribute__ ((fd_arg("notint"))); /* { dg-warning "'fd_arg' attribute argument has type ('char\\\[7\\\]'|'const char\\\*')" } */
index 96ccf2f..d794b46 100644 (file)
@@ -1,49 +1,49 @@
-int open(const char *, int mode);\r
-void close(int fd);\r
-#define O_RDONLY 0\r
-#define O_WRONLY 1\r
-#define O_RDWR 2\r
-#define STDIN 0\r
-\r
-void \r
-test_1 (const char *path)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    close (fd); /* { dg-message "\\(2\\) first 'close' here" "event1" } */\r
-    close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */\r
-    /* { dg-message "\\(3\\) second 'close' here; first 'close' was at \\(2\\)" "event2" { target *-*-* } .-1 } */\r
-}\r
-\r
-void \r
-test_2 (const char *path)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    if (fd < 0) /* { dg-message "\\(2\\) assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */\r
-    /* { dg-message "\\(3\\) following 'false' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */\r
-        return;\r
-    close (fd); /* { dg-message "\\(4\\) ...to here" "event1" } */\r
-    /* { dg-message "\\(5\\) first 'close' here" "event2" { target *-*-* } .-1 } */\r
-    close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */\r
-    /* {dg-message "\\(6\\) second 'close' here; first was at \\(5\\)" "" { target *-*-* } .-1 } */\r
-}\r
-\r
-void\r
-test_3 ()\r
-{\r
-    /* FD 0 is stdin at the entry to "main" and thus read-only, but we have no\r
-    guarantees here that it hasn't been closed and then reopened for\r
-    writing, so we can't issue a warning */\r
-    \r
-    int fd = STDIN;\r
-    close(fd); /* { dg-message "\\(1\\) first 'close' here" } */\r
-    close(fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */\r
-     /* { dg-message "\\(2\\) second 'close' here; first 'close' was at \\(1\\)" "event2" { target *-*-* } .-1 } */\r
-}\r
-\r
-void\r
-test_4 ()\r
-{\r
-    int fd = -1;\r
-    close(fd);\r
-    close(fd);\r
+int open(const char *, int mode);
+void close(int fd);
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define STDIN 0
+
+void 
+test_1 (const char *path)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    close (fd); /* { dg-message "\\(2\\) first 'close' here" "event1" } */
+    close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+    /* { dg-message "\\(3\\) second 'close' here; first 'close' was at \\(2\\)" "event2" { target *-*-* } .-1 } */
+}
+
+void 
+test_2 (const char *path)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    if (fd < 0) /* { dg-message "\\(2\\) assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+    /* { dg-message "\\(3\\) following 'false' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+        return;
+    close (fd); /* { dg-message "\\(4\\) ...to here" "event1" } */
+    /* { dg-message "\\(5\\) first 'close' here" "event2" { target *-*-* } .-1 } */
+    close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+    /* {dg-message "\\(6\\) second 'close' here; first was at \\(5\\)" "" { target *-*-* } .-1 } */
+}
+
+void
+test_3 ()
+{
+    /* FD 0 is stdin at the entry to "main" and thus read-only, but we have no
+    guarantees here that it hasn't been closed and then reopened for
+    writing, so we can't issue a warning */
+    
+    int fd = STDIN;
+    close(fd); /* { dg-message "\\(1\\) first 'close' here" } */
+    close(fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+     /* { dg-message "\\(2\\) second 'close' here; first 'close' was at \\(1\\)" "event2" { target *-*-* } .-1 } */
+}
+
+void
+test_4 ()
+{
+    int fd = -1;
+    close(fd);
+    close(fd);
 }
\ No newline at end of file
index 40fc8af..55e84e3 100644 (file)
@@ -1,85 +1,85 @@
-int open(const char *, int mode);\r
-void close(int fd);\r
-int write (int fd, void *buf, int nbytes);\r
-int read (int fd, void *buf, int nbytes);\r
-int some_condition();\r
-\r
-#define O_RDONLY 0\r
-#define O_WRONLY 1\r
-#define O_RDWR 2\r
-#define STDIN 0\r
-#define O_NOATIME 262144\r
-\r
-void\r
-test_1 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    write (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */\r
-    /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */\r
-    close(fd);\r
-}\r
-\r
-void\r
-test_2 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    read (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */\r
-    /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */\r
-    close (fd);\r
-}\r
-\r
-void \r
-test_3 (void *buf)\r
-{\r
-    int fd = -1;\r
-    read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */\r
-    /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */\r
-}\r
-\r
-void\r
-test_4 (void *buf)\r
-{\r
-    int fd = STDIN;\r
-    read (fd, buf, 1);\r
-    close(fd);\r
-}\r
-\r
-void\r
-test_5 (char *path, void *buf)\r
-{\r
-    int flags = O_RDONLY;\r
-    if (some_condition())\r
-        flags |= O_NOATIME;\r
-    int fd = open (path, flags);\r
-    read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */\r
-    /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */\r
-    close (fd);   \r
-}\r
-\r
-\r
-void\r
-test_6 (char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDONLY);\r
-    if (fd != -1)\r
-    {\r
-        read (fd, buf, 1);\r
-    }\r
-    close (fd);\r
-}\r
-\r
-\r
-void\r
-test_7 (char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    if (fd != -1) /* { dg-message "\\(2\\) assuming 'fd' is an invalid file descriptor \\(< 0\\)" } */\r
-    {\r
-        read (fd, buf, 1);\r
-    } else\r
-    {\r
-        write (fd, buf, 1); /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" } */\r
-        \r
-    }\r
-    close(fd);\r
+int open(const char *, int mode);
+void close(int fd);
+int write (int fd, void *buf, int nbytes);
+int read (int fd, void *buf, int nbytes);
+int some_condition();
+
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define STDIN 0
+#define O_NOATIME 262144
+
+void
+test_1 (const char *path, void *buf)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    write (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */
+    /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */
+    close(fd);
+}
+
+void
+test_2 (const char *path, void *buf)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    read (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */
+    /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */
+    close (fd);
+}
+
+void 
+test_3 (void *buf)
+{
+    int fd = -1;
+    read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */
+    /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */
+}
+
+void
+test_4 (void *buf)
+{
+    int fd = STDIN;
+    read (fd, buf, 1);
+    close(fd);
+}
+
+void
+test_5 (char *path, void *buf)
+{
+    int flags = O_RDONLY;
+    if (some_condition())
+        flags |= O_NOATIME;
+    int fd = open (path, flags);
+    read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */
+    /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */
+    close (fd);   
+}
+
+
+void
+test_6 (char *path, void *buf)
+{
+    int fd = open (path, O_RDONLY);
+    if (fd != -1)
+    {
+        read (fd, buf, 1);
+    }
+    close (fd);
+}
+
+
+void
+test_7 (char *path, void *buf)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    if (fd != -1) /* { dg-message "\\(2\\) assuming 'fd' is an invalid file descriptor \\(< 0\\)" } */
+    {
+        read (fd, buf, 1);
+    } else
+    {
+        write (fd, buf, 1); /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" } */
+        
+    }
+    close(fd);
 }
\ No newline at end of file
index 4126346..ecd787c 100644 (file)
@@ -1,72 +1,72 @@
-#include <stdio.h>\r
-\r
-int open(const char *, int mode);\r
-void close(int fd);\r
-int write (int fd, void *buf, int nbytes);\r
-int read (int fd, void *buf, int nbytes);\r
-\r
-#define O_RDONLY 0\r
-#define O_WRONLY 1\r
-#define O_RDWR 2\r
-\r
-\r
-void\r
-test_1 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDONLY); /* { dg-message "opened here as read-only" } */\r
-    if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */\r
-    /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */\r
-    {\r
-        write (fd, buf, 1); /* { dg-warning "'write' on read-only file descriptor 'fd'" "warning" } */\r
-        /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */\r
-        /* { dg-message "\\(5\\) 'write' on read-only file descriptor 'fd'" "event2" { target *-*-* } .-2 } */\r
-        close (fd);\r
-    }\r
-}\r
-\r
-void\r
-test_2 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_WRONLY); /* { dg-message "opened here as write-only" } */\r
-    if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */\r
-    /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */\r
-    {\r
-        read (fd, buf, 1); /* { dg-warning "'read' on write-only file descriptor 'fd'" "warning" } */\r
-        /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */\r
-        /* { dg-message "\\(5\\) 'read' on write-only file descriptor 'fd'" "event2" { target *-*-* } .-2 } */\r
-        close (fd);\r
-    }\r
-}\r
-\r
-\r
-void \r
-test_3 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    if (fd >= 0)\r
-    {\r
-        close(fd); /* {dg-message "\\(2\\) closed here"} */\r
-        read(fd, buf, 1); /* { dg-warning "'read' on closed file descriptor 'fd'" }  */\r
-        /* {dg-message "\\(3\\) 'read' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */\r
-    }\r
-}\r
-\r
-void \r
-test_4 (const char *path, void *buf)\r
-{\r
-    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */\r
-    if (fd >= 0)\r
-    {\r
-        close(fd); /* {dg-message "\\(2\\) closed here"} */\r
-        write(fd, buf, 1); /* { dg-warning "'write' on closed file descriptor 'fd'" }  */\r
-        /* {dg-message "\\(3\\) 'write' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */\r
-    }\r
-}\r
-\r
-void\r
-test_5 (const char *path)\r
-{\r
-    int fd = open (path, O_RDWR);\r
-    close(fd);\r
-    printf("%d", fd); /* { dg-bogus "'printf' on a closed file descriptor 'fd'" } */\r
+#include <stdio.h>
+
+int open(const char *, int mode);
+void close(int fd);
+int write (int fd, void *buf, int nbytes);
+int read (int fd, void *buf, int nbytes);
+
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+
+
+void
+test_1 (const char *path, void *buf)
+{
+    int fd = open (path, O_RDONLY); /* { dg-message "opened here as read-only" } */
+    if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+    /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+    {
+        write (fd, buf, 1); /* { dg-warning "'write' on read-only file descriptor 'fd'" "warning" } */
+        /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */
+        /* { dg-message "\\(5\\) 'write' on read-only file descriptor 'fd'" "event2" { target *-*-* } .-2 } */
+        close (fd);
+    }
+}
+
+void
+test_2 (const char *path, void *buf)
+{
+    int fd = open (path, O_WRONLY); /* { dg-message "opened here as write-only" } */
+    if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+    /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+    {
+        read (fd, buf, 1); /* { dg-warning "'read' on write-only file descriptor 'fd'" "warning" } */
+        /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */
+        /* { dg-message "\\(5\\) 'read' on write-only file descriptor 'fd'" "event2" { target *-*-* } .-2 } */
+        close (fd);
+    }
+}
+
+
+void 
+test_3 (const char *path, void *buf)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    if (fd >= 0)
+    {
+        close(fd); /* {dg-message "\\(2\\) closed here"} */
+        read(fd, buf, 1); /* { dg-warning "'read' on closed file descriptor 'fd'" }  */
+        /* {dg-message "\\(3\\) 'read' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */
+    }
+}
+
+void 
+test_4 (const char *path, void *buf)
+{
+    int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+    if (fd >= 0)
+    {
+        close(fd); /* {dg-message "\\(2\\) closed here"} */
+        write(fd, buf, 1); /* { dg-warning "'write' on closed file descriptor 'fd'" }  */
+        /* {dg-message "\\(3\\) 'write' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */
+    }
+}
+
+void
+test_5 (const char *path)
+{
+    int fd = open (path, O_RDWR);
+    close(fd);
+    printf("%d", fd); /* { dg-bogus "'printf' on a closed file descriptor 'fd'" } */
 }
\ No newline at end of file
index 8f29c11..c18b2ad 100644 (file)
@@ -1,53 +1,53 @@
-int open(const char *, int mode);\r
-void close(int fd);\r
-int write (int fd, void *buf, int nbytes);\r
-int read (int fd, void *buf, int nbytes);\r
-\r
-#define O_RDONLY 0\r
-#define O_WRONLY 1\r
-#define O_RDWR 2\r
-\r
-void f (int fd) __attribute__((fd_arg(1))); /* { dg-message "argument 1 of 'f' must be an open file descriptor, due to '__attribute__\\(\\(fd_arg\\(1\\)\\)\\)'" } */\r
-\r
-void\r
-test_1 (const char *path)\r
-{\r
-    int fd = open (path, O_RDWR);\r
-    close(fd);\r
-    f(fd); /* { dg-warning "'f' on closed file descriptor 'fd'" } */\r
-      /* { dg-message "\\(3\\) 'f' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" { target *-*-* } .-1 } */\r
-}\r
-\r
-void g (int fd) __attribute__((fd_arg_read(1))); /* { dg-message "argument 1 of 'g' must be a readable file descriptor, due to '__attribute__\\(\\(fd_arg_read\\(1\\)\\)\\)'" } */\r
-\r
-void\r
-test_2 (const char *path)\r
-{\r
-  int fd = open (path, O_WRONLY);\r
-  if (fd != -1)\r
-  {\r
-    g (fd); /* { dg-warning "'g' on write-only file descriptor 'fd'" } */\r
-  }\r
-  close (fd);\r
-}\r
-\r
-void h (int fd) __attribute__((fd_arg_write(1))); /* { dg-message "argument 1 of 'h' must be a writable file descriptor, due to '__attribute__\\(\\(fd_arg_write\\(1\\)\\)\\)'" } */\r
-void\r
-test_3 (const char *path)\r
-{\r
-  int fd = open (path, O_RDONLY);\r
-  if (fd != -1)\r
-  {\r
-    h (fd); /* { dg-warning "'h' on read-only file descriptor 'fd'" } */\r
-  }\r
-  close(fd);\r
-}\r
-\r
-void ff (int fd) __attribute__((fd_arg(1))); /* { dg-message "argument 1 of 'ff' must be an open file descriptor, due to '__attribute__\\(\\(fd_arg\\(1\\)\\)\\)'" } */\r
-\r
-void test_4 (const char *path)\r
-{\r
-  int fd = open (path, O_RDWR);\r
-  ff (fd); /* { dg-warning "'ff' on possibly invalid file descriptor 'fd'" } */\r
-  close(fd);\r
+int open(const char *, int mode);
+void close(int fd);
+int write (int fd, void *buf, int nbytes);
+int read (int fd, void *buf, int nbytes);
+
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+
+void f (int fd) __attribute__((fd_arg(1))); /* { dg-message "argument 1 of 'f' must be an open file descriptor, due to '__attribute__\\(\\(fd_arg\\(1\\)\\)\\)'" } */
+
+void
+test_1 (const char *path)
+{
+    int fd = open (path, O_RDWR);
+    close(fd);
+    f(fd); /* { dg-warning "'f' on closed file descriptor 'fd'" } */
+      /* { dg-message "\\(3\\) 'f' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" { target *-*-* } .-1 } */
+}
+
+void g (int fd) __attribute__((fd_arg_read(1))); /* { dg-message "argument 1 of 'g' must be a readable file descriptor, due to '__attribute__\\(\\(fd_arg_read\\(1\\)\\)\\)'" } */
+
+void
+test_2 (const char *path)
+{
+  int fd = open (path, O_WRONLY);
+  if (fd != -1)
+  {
+    g (fd); /* { dg-warning "'g' on write-only file descriptor 'fd'" } */
+  }
+  close (fd);
+}
+
+void h (int fd) __attribute__((fd_arg_write(1))); /* { dg-message "argument 1 of 'h' must be a writable file descriptor, due to '__attribute__\\(\\(fd_arg_write\\(1\\)\\)\\)'" } */
+void
+test_3 (const char *path)
+{
+  int fd = open (path, O_RDONLY);
+  if (fd != -1)
+  {
+    h (fd); /* { dg-warning "'h' on read-only file descriptor 'fd'" } */
+  }
+  close(fd);
+}
+
+void ff (int fd) __attribute__((fd_arg(1))); /* { dg-message "argument 1 of 'ff' must be an open file descriptor, due to '__attribute__\\(\\(fd_arg\\(1\\)\\)\\)'" } */
+
+void test_4 (const char *path)
+{
+  int fd = open (path, O_RDWR);
+  ff (fd); /* { dg-warning "'ff' on possibly invalid file descriptor 'fd'" } */
+  close(fd);
 }
\ No newline at end of file