--- /dev/null
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::Requires {
+ 'IPC::Run3' => 0,
+};
+
+use Test::MooseX::Compiler qw( save_class );
+use Test::More 0.88;
+
+use IPC::Run3 qw( run3 );
+
+use MooseX::Compiler;
+
+{
+ my $code = <<'EOF';
+package Test::Class1;
+
+use strict;
+use warnings;
+
+use Moose;
+
+# should be line 9 below
+sub line { return __LINE__ }
+
+1;
+EOF
+
+ my $class = 'Test::Class1';
+ save_class( $class, $code );
+
+ my $compiler = MooseX::Compiler->new(
+ class => $class,
+ );
+
+ my $compiled = $compiler->compile_class();
+
+ my $output;
+ my $error;
+
+ # We need to compile the code in a fresh process to see if the line
+ # numbers are correct.
+ run3(
+ [
+ $^X, '-e',
+ $compiled . "\npackage main;\nprint Test::Class1->line();"
+ ],
+ \undef,
+ \$output,
+ \$error,
+ );
+
+ die $error if defined $error && length $error;
+
+ is(
+ $output,
+ 9,
+ 'compilation does not break line numbers'
+ );
+}
+
+done_testing();