--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use File::Spec;
+use Test::More tests => 5;
+use Symbol qw(gensym);
+use IPC::Open3;
+use Config;
+
+my $input = File::Spec->catfile(qw( t local ptr_cast_test.c ));
+my $output = File::Spec->catfile(qw( t local ptr_cast_test ));
+
+unlink $output;
+
+my $out = gensym();
+my $err = gensym();
+
+my @extraargs;
+push(@extraargs, '/nologo') if $^O eq 'MSWin32' && $Config{cc} eq 'cl';
+my $cmd = "$Config{cc} -o $output $input " . join(' ', @extraargs);
+diag( "compiling test program with: $cmd" );
+my $pid = open3(undef, $out, $err, $cmd);
+waitpid $pid, 0;
+
+is( $?, 0, 'compiling ptr_cast_test.c' );
+
+is( do { local $/ = undef; <$err>}, '', 'STDERR empty after compiling' );
+
+$pid = open3(undef, $out, $err, "./$output");
+waitpid $pid, 0;
+
+is( $?, 0, './ptr_cast_test exited with 0' );
+
+like( do { local $/ = undef; <$out> }, qr/ptr_cast_test:\s+ok\s+/, 'casting pointer integer and back worked' );
+ok( !do { local $/ = undef; <$err> }, 'STDERR empty after running' );