reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
#!/usr/bin/perl -w

# This tiny little script, which should be run from the clang
# directory (with clang in your patch), tries to take each
# compilable Clang test and build a PCH file from that test, then read
# and dump the contents of the PCH file just created.
use POSIX;

$exitcode = 0;
sub testfiles($$) {
  my $suffix = shift;
  my $language = shift;
  my $passed = 0;
  my $failed = 0;
  my $skipped = 0;

  @files = `ls test/*/*.$suffix`;
  foreach $file (@files) {
    chomp($file);
    my $code = system("clang -fsyntax-only -x $language $file > /dev/null 2>&1");
    if ($code == 0) {
      print(".");
      $code = system("clang -cc1 -emit-pch -x $language -o $file.pch $file > /dev/null 2>&1");
      if ($code == 0) {
        $code = system("clang -cc1 -include-pch $file.pch -x $language -ast-dump /dev/null > /dev/null 2>&1");
        if ($code == 0) {
          $passed++;
        } elsif (($code & 0xFF) == SIGINT) {
          exit($exitcode);
        } else {
          print("\n---Failed to dump AST file for \"$file\"---\n");
          $exitcode = 1;
          $failed++;
        }
        unlink "$file.pch";
      } elsif (($code & 0xFF) == SIGINT) {
        exit($exitcode);
      } else {
        print("\n---Failed to build PCH file for \"$file\"---\n");
        $exitcode = 1;
          $failed++;
      }
    } elsif (($code & 0xFF) == SIGINT) {
      exit($exitcode);
    } else {
      print("x");
      $skipped++;
    }
  }

  print("\n\n$passed tests passed\n");
  print("$failed tests failed\n");
  print("$skipped tests skipped ('x')\n")
}

printf("-----Testing precompiled headers for C-----\n");
testfiles("c", "c");
printf("\n-----Testing precompiled headers for Objective-C-----\n");
testfiles("m", "objective-c");
print("\n");
exit($exitcode);