+########
+# pp_sys.c [pp_lstat]
+use warnings 'io';
+open FH, "../harness" or die "# $!";
+lstat FH;
+lstat *FH;
+lstat \*FH;
+open my $fh, $0 or die "# $!";
+lstat $fh;
+lstat *FH{IO};
+no warnings 'io';
+lstat FH;
+lstat $fh;
+close FH;
+close $fh;
+EXPECT
+lstat() on filehandle FH at - line 4.
+lstat() on filehandle FH at - line 5.
+lstat() on filehandle FH at - line 6.
+lstat() on filehandle $fh at - line 8.
+lstat() on filehandle at - line 9.
+########
+
+# pp_sys.c [pp_lstat]
+use warnings 'io';
+use utf8;
+use open qw( :utf8 :std );
+open ᶠḨ, "../harness" or die "# $!";
+lstat ᶠḨ;
+open my $fᚺ, $0 or die "# $!";
+lstat $fᚺ;
+no warnings 'io';
+lstat ᶠḨ;
+lstat $fᚺ;
+close ᶠḨ;
+close $fᚺ;
+EXPECT
+lstat() on filehandle ᶠḨ at - line 7.
+lstat() on filehandle $fᚺ at - line 9.
+########
+# pp_sys.c [pp_getc]
+use warnings qw(unopened closed) ;
+getc FOO;
+close STDIN;
+getc STDIN;
+# Create an empty file
+$file = 'getcwarn.tmp';
+open FH1, ">$file" or die "# $!"; close FH1;
+open FH2, $file or die "# $!";
+getc FH2; # Should not warn at EOF
+close FH2;
+getc FH2; # Warns, now
+unlink $file;
+no warnings qw(unopened closed) ;
+getc FOO;
+getc STDIN;
+getc FH2;
+EXPECT
+getc() on unopened filehandle FOO at - line 3.
+getc() on closed filehandle STDIN at - line 5.
+getc() on closed filehandle FH2 at - line 12.
+########
+# pp_sys.c [pp_sselect]
+use warnings 'misc';
+$x = 1;
+select $x, undef, undef, 1;
+sub TIESCALAR{bless[]} sub FETCH {"hello"} sub STORE{}
+tie $y, "";
+select $y, undef, undef, 1;
+no warnings 'misc';
+select $x, undef, undef, 1;
+EXPECT
+Non-string passed as bitmask at - line 4.
+########
+use Config;
+BEGIN {
+ if (!$Config{d_fchdir}) {
+ print <<EOM;
+SKIPPED
+# fchdir not present
+EOM
+ exit;
+ }
+}
+opendir FOO, '.'; closedir FOO;
+open BAR, '.'; close BAR;
+opendir $dh, '.'; closedir $dh;
+open $fh, '.'; close $fh;
+chdir FOO;
+chdir BAR;
+chdir $dh;
+chdir $fh;
+use warnings qw(unopened closed) ;
+chdir FOO;
+chdir BAR;
+chdir $dh;
+chdir $fh;
+EXPECT
+chdir() on unopened filehandle FOO at - line 20.
+chdir() on closed filehandle BAR at - line 21.
+chdir() on unopened filehandle $dh at - line 22.
+chdir() on closed filehandle $fh at - line 23.
+########
+# pp_sys.c [pp_open]
+use warnings;
+opendir FOO, ".";
+opendir my $foo, ".";
+open FOO, "../harness";
+open $foo, "../harness";
+no warnings qw(io deprecated);
+open FOO, "../harness";
+open $foo, "../harness";
+EXPECT
+Opening dirhandle FOO also as a file at - line 5.
+Opening dirhandle $foo also as a file at - line 6.
+########
+
+# pp_sys.c [pp_open]
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+opendir FOO, ".";
+opendir $foo, ".";
+open FOO, "../harness";
+open $foo, "../harness";
+no warnings qw(io deprecated);
+open FOO, "../harness";
+open $foo, "../harness";
+EXPECT
+Opening dirhandle FOO also as a file at - line 8.
+Opening dirhandle $foo also as a file at - line 9.
+########
+# pp_sys.c [pp_open_dir]
+use warnings;
+open FOO, "../harness";
+open my $foo, "../harness";
+opendir FOO, ".";
+opendir $foo, ".";
+no warnings qw(io deprecated);
+opendir FOO, ".";
+opendir $foo, ".";
+EXPECT
+Opening filehandle FOO also as a directory at - line 5.
+Opening filehandle $foo also as a directory at - line 6.
+########
+
+# pp_sys.c [pp_open_dir]
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+use warnings;
+open FOO, "../harness";
+open $foo, "../harness";
+opendir FOO, ".";
+opendir $foo, ".";
+no warnings qw(io deprecated);
+opendir FOO, ".";
+opendir $foo, ".";
+EXPECT
+Opening filehandle FOO also as a directory at - line 9.
+Opening filehandle $foo also as a directory at - line 10.
+########
+# pp_sys.c [pp_*dir]
+use Config ;
+BEGIN {
+ if ( ! $Config{d_telldir}) {
+ print <<EOM ;
+SKIPPED
+# telldir not present
+EOM
+ exit
+ }
+}
+#line 2
+use warnings 'io';
+opendir FOO, ".";
+opendir $foo, ".";
+closedir FOO;
+closedir $foo;
+
+readdir(FOO);
+telldir(FOO);
+seekdir(FOO, 0);
+rewinddir(FOO);
+closedir(FOO);
+
+readdir($foo);
+telldir($foo);
+seekdir($foo, 0);
+rewinddir($foo);
+closedir($foo);
+
+EXPECT
+readdir() attempted on invalid dirhandle FOO at - line 8.
+telldir() attempted on invalid dirhandle FOO at - line 9.
+seekdir() attempted on invalid dirhandle FOO at - line 10.
+rewinddir() attempted on invalid dirhandle FOO at - line 11.
+closedir() attempted on invalid dirhandle FOO at - line 12.
+readdir() attempted on invalid dirhandle $foo at - line 14.
+telldir() attempted on invalid dirhandle $foo at - line 15.
+seekdir() attempted on invalid dirhandle $foo at - line 16.
+rewinddir() attempted on invalid dirhandle $foo at - line 17.
+closedir() attempted on invalid dirhandle $foo at - line 18.
+########
+
+# pp_sys.c [pp_*dir]
+use Config ;
+BEGIN {
+ if ( ! $Config{d_telldir}) {
+ print <<EOM ;
+SKIPPED
+# telldir not present
+EOM
+ exit
+ }
+}
+#line 3
+use utf8;
+use open qw( :utf8 :std );
+use warnings 'io';
+opendir FOO, ".";
+opendir $foo, ".";
+opendir FOO, ".";
+opendir $foo, ".";
+closedir FOO;
+closedir $foo;
+
+readdir(FOO);
+telldir(FOO);
+seekdir(FOO, 0);
+rewinddir(FOO);
+closedir(FOO);
+
+readdir($foo);
+telldir($foo);
+seekdir($foo, 0);
+rewinddir($foo);
+closedir($foo);
+
+EXPECT
+readdir() attempted on invalid dirhandle FOO at - line 13.
+telldir() attempted on invalid dirhandle FOO at - line 14.
+seekdir() attempted on invalid dirhandle FOO at - line 15.
+rewinddir() attempted on invalid dirhandle FOO at - line 16.
+closedir() attempted on invalid dirhandle FOO at - line 17.
+readdir() attempted on invalid dirhandle $foo at - line 19.
+telldir() attempted on invalid dirhandle $foo at - line 20.
+seekdir() attempted on invalid dirhandle $foo at - line 21.
+rewinddir() attempted on invalid dirhandle $foo at - line 22.
+closedir() attempted on invalid dirhandle $foo at - line 23.