issue50.t 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #! /usr/bin/env perl
  2. # http://code.google.com/p/perl-compiler/issues/detail?id=50
  3. # B::CC UV for <<
  4. use Test::More tests => 1;
  5. use strict;
  6. BEGIN {
  7. unshift @INC, 't';
  8. require "test.pl";
  9. }
  10. use Config;
  11. my $ivsize = $Config{ivsize};
  12. my $script = <<'EOF';
  13. my $ok = 1;
  14. sub check {
  15. my $m = shift;
  16. my $s = sprintf("%lx $m\n", $m);
  17. $ok = 0 if $s =~ /fffe -2/;
  18. }
  19. my $maxuv = 0xffffffff if $ivsize == 4;
  20. $maxuv = 0xffffffffffffffff if $ivsize == 8;
  21. $maxuv = 0xffff if $ivsize == 2;
  22. die "1..1 skipped, unknown ivsize\n" unless $maxuv;
  23. my $maxiv = 0x7fffffff if $ivsize == 4;
  24. $maxiv = 0x7fffffffffffffff if $ivsize == 8;
  25. $maxiv = 0x7fff if $ivsize == 2;
  26. check($maxuv);
  27. check(($maxuv & $maxiv) << 1);
  28. my $mask = $maxuv;
  29. check($mask);
  30. my $mask1 = ($mask & $maxiv) << 1;
  31. check($mask1);
  32. $mask1 &= $maxuv;
  33. check($mask1);
  34. print "ok\n" if $ok;
  35. EOF
  36. $script =~ s/\$ivsize/$ivsize/eg;
  37. use B::CC;
  38. ctestok(1, "CC", "ccode50i", $script, # fixed with r633
  39. ($B::CC::VERSION < 1.08 ? "TODO ":"")
  40. . "perlcc UV << issue50 - fixed with B-C-1.28");