From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 63E8E3857809 for ; Mon, 25 Jul 2022 15:53:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 63E8E3857809 Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-86-n1Zela02NkuXZoo175M_HA-1; Mon, 25 Jul 2022 11:53:22 -0400 X-MC-Unique: n1Zela02NkuXZoo175M_HA-1 Received: by mail-qt1-f197.google.com with SMTP id ca5-20020a05622a1f0500b0031ef0a522c4so5785414qtb.5 for ; Mon, 25 Jul 2022 08:53:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=R7TYRR8Ze/QWiNSpVt+sCr11v6Y/iBUvNmjx7i2hwl4=; b=rcMJJ99prtQf7VcTFR/i4/hPz+QY8iyXlO5Eil0cWxvKlAk20S7SF1e419Gsp2jOQ7 ttdGXYryNi7YED8s5np8Kp4eHlekLMurE8w9w2NF+FiahLcvn0yWzC73+hi1gRPCL34y fjXJRZHjC/lIypikqgry78TxbYSWLu0l9zM/p+HZV9VsrYGzPALQNIfZQZkEHGKhYU62 WjThAHOUntPh+B+TMRIZ8l5EIuyvsI2ng8bbhCS99M5UN/yZvdNclFfaSSQjBscf8PxQ RY5eup/4i4osr5AcbCQYolgZC2815rFvPiQojA8Pd+5eXE6+vuo64aYRKPE+YFTzmokz /4eQ== X-Gm-Message-State: AJIora9QAM7240BEr4LtQsZSdDbaHCQQRosGaOd4OfGuCfBMglIaMYdV kTrmgFUCObDUSTEt5A+icCUwmeufR5Cp+1qvRQLy1r1Zu4vULtLJv/QWfdvscihroNEVOC4uZEJ rf/HcKF8iJr104mWOyw== X-Received: by 2002:a05:620a:f93:b0:6b5:c8ff:d2d8 with SMTP id b19-20020a05620a0f9300b006b5c8ffd2d8mr9712288qkn.386.1658764402309; Mon, 25 Jul 2022 08:53:22 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s3Cfbxg0db1UYFNOXha8uYc/wh6m2lSQ3Gnh7BJXLeexiiBha+gz+qLetPzKoSkih6PUZ4uQ== X-Received: by 2002:a05:620a:f93:b0:6b5:c8ff:d2d8 with SMTP id b19-20020a05620a0f9300b006b5c8ffd2d8mr9712273qkn.386.1658764401896; Mon, 25 Jul 2022 08:53:21 -0700 (PDT) Received: from t14s.localdomain (c-73-69-212-193.hsd1.nh.comcast.net. [73.69.212.193]) by smtp.gmail.com with ESMTPSA id i21-20020a05620a405500b006b5f4b7b088sm9704017qko.108.2022.07.25.08.53.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Jul 2022 08:53:21 -0700 (PDT) Message-ID: <699b6bc65ee0b076d7eef4a3045bbcc1a43fb42b.camel@redhat.com> Subject: Re: [PATCH] analyzer: convert tests with dos2unix From: David Malcolm To: Martin =?UTF-8?Q?Li=C5=A1ka?= , gcc-patches@gcc.gnu.org Cc: mirimmad@outlook.com Date: Mon, 25 Jul 2022 11:53:20 -0400 In-Reply-To: <3bbb9882-a8c9-98f1-3d4e-1efe0b688b1e@suse.cz> References: <3bbb9882-a8c9-98f1-3d4e-1efe0b688b1e@suse.cz> User-Agent: Evolution 3.38.4 (3.38.4-1.fc33) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, BODY_8BITS, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Jul 2022 15:53:27 -0000 On Mon, 2022-07-25 at 08:45 +0200, Martin Liška wrote: > Ready for master? Yes, thanks. Dave > Thanks, > Martin > > 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 |  36 +++--- >  gcc/testsuite/gcc.dg/analyzer/fd-2.c |  96 +++++++-------- >  gcc/testsuite/gcc.dg/analyzer/fd-3.c | 168 +++++++++++++------------ > -- >  gcc/testsuite/gcc.dg/analyzer/fd-4.c | 142 +++++++++++----------- >  gcc/testsuite/gcc.dg/analyzer/fd-5.c | 104 ++++++++--------- >  5 files changed, 273 insertions(+), 273 deletions(-) > > diff --git a/gcc/testsuite/c-c++-common/attr-fd.c b/gcc/testsuite/c- > c++-common/attr-fd.c > index e4bb4ed0374..9f12093c04f 100644 > --- a/gcc/testsuite/c-c++-common/attr-fd.c > +++ b/gcc/testsuite/c-c++-common/attr-fd.c > @@ -1,18 +1,18 @@ > - > -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\\\*')" } */ > + > +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\\\*')" } */ > diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-2.c > b/gcc/testsuite/gcc.dg/analyzer/fd-2.c > index 96ccf2f7ba8..d794b460a2e 100644 > --- a/gcc/testsuite/gcc.dg/analyzer/fd-2.c > +++ b/gcc/testsuite/gcc.dg/analyzer/fd-2.c > @@ -1,49 +1,49 @@ > -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); > +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 > diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-3.c > b/gcc/testsuite/gcc.dg/analyzer/fd-3.c > index 40fc8af27b5..55e84e3634a 100644 > --- a/gcc/testsuite/gcc.dg/analyzer/fd-3.c > +++ b/gcc/testsuite/gcc.dg/analyzer/fd-3.c > @@ -1,85 +1,85 @@ > -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); > +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 > diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-4.c > b/gcc/testsuite/gcc.dg/analyzer/fd-4.c > index 41263468a6c..ecd787caff7 100644 > --- a/gcc/testsuite/gcc.dg/analyzer/fd-4.c > +++ b/gcc/testsuite/gcc.dg/analyzer/fd-4.c > @@ -1,72 +1,72 @@ > -#include > - > -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'" } */ > +#include > + > +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 > diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-5.c > b/gcc/testsuite/gcc.dg/analyzer/fd-5.c > index 8f29c11b3e8..c18b2adcbe5 100644 > --- a/gcc/testsuite/gcc.dg/analyzer/fd-5.c > +++ b/gcc/testsuite/gcc.dg/analyzer/fd-5.c > @@ -1,53 +1,53 @@ > -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); > +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